Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #10835: 0001-time-test-for-a-large-restful-routeset-recognition.patch

File 0001-time-test-for-a-large-restful-routeset-recognition.patch, 3.7 kB (added by oleganza, 6 months ago)
  • a/actionpack/test/controller/fake_controllers.rb

    old new  
    1010  class NewsFeedController < Class.new(ActionController::Base); end 
    1111end 
    1212 
     13# For speed test 
     14class SpeedController < ActionController::Base;  end 
     15class SearchController        < SpeedController; end 
     16class VideosController        < SpeedController; end 
     17class VideoFileController     < SpeedController; end 
     18class VideoSharesController   < SpeedController; end 
     19class VideoAbusesController   < SpeedController; end 
     20class VideoUploadsController  < SpeedController; end 
     21class VideoVisitsController   < SpeedController; end 
     22class UsersController         < SpeedController; end 
     23class SettingsController      < SpeedController; end 
     24class ChannelsController      < SpeedController; end 
     25class ChannelVideosController < SpeedController; end 
     26class SessionsController      < SpeedController; end 
     27class LostPasswordsController < SpeedController; end 
     28class PagesController         < SpeedController; end 
     29 
    1330ActionController::Routing::Routes.draw do |map| 
    1431  map.route_one 'route_one', :controller => 'elsewhere', :action => 'flash_me' 
    1532  map.connect ':controller/:action/:id' 
  • a/actionpack/test/controller/routing_test.rb

    old new  
    8484  end 
    8585   
    8686  def test_time_recognition 
    87     n = 10000 
     87    # We create many routes to make situation more realistic 
     88    @rs = ::ActionController::Routing::RouteSet.new 
     89    @rs.draw { |map| 
     90      map.frontpage '', :controller => 'search', :action => 'new' 
     91      map.resources :videos do |video| 
     92        video.resources :comments 
     93        video.resource  :file,      :controller => 'video_file' 
     94        video.resource  :share,     :controller => 'video_shares' 
     95        video.resource  :abuse,     :controller => 'video_abuses' 
     96      end 
     97      map.resources :abuses, :controller => 'video_abuses' 
     98      map.resources :video_uploads 
     99      map.resources :video_visits 
     100 
     101      map.resources :users do |user| 
     102        user.resource  :settings 
     103        user.resources :videos 
     104      end 
     105      map.resources :channels do |channel| 
     106        channel.resources :videos, :controller => 'channel_videos' 
     107      end 
     108      map.resource  :session 
     109      map.resource  :lost_password 
     110      map.search    'search', :controller => 'search' 
     111      map.resources :pages 
     112      map.connect ':controller/:action/:id'  
     113    } 
     114    n = 1000 
    88115    if RunTimeTests 
    89116      GC.start 
    90117      rectime = Benchmark.realtime do 
    91118        n.times do 
    92           rs.recognize_path("content"
    93           rs.recognize_path("content/list"
    94           rs.recognize_path("content/show/10"
    95           rs.recognize_path("admin/user"
    96           rs.recognize_path("admin/user/list"
    97           rs.recognize_path("admin/user/show/10"
     119          rs.recognize_path("/videos/1234567", {:method => :get}
     120          rs.recognize_path("/videos/1234567/abuse", {:method => :get}
     121          rs.recognize_path("/users/1234567/settings", {:method => :get}
     122          rs.recognize_path("/channels/1234567", {:method => :get}
     123          rs.recognize_path("/session/new", {:method => :get}
     124          rs.recognize_path("/admin/user/show/10", {:method => :get}
    98125        end 
    99126      end 
    100       puts "\n\nRecognition (RouteSet):" 
     127      puts "\n\nRecognition (#{rs.routes.size} routes):" 
    101128      per_url = rectime / (n * 6) 
    102129      puts "#{per_url * 1000} ms/url" 
    103130      puts "#{1 / per_url} url/s\n\n"