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

Changeset 8674

Show
Ignore:
Timestamp:
01/19/08 05:25:20 (4 months ago)
Author:
bitsweat
Message:

Performance: optimize route recognition. Large speedup for apps with many resource routes. Closes #10835.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r8669 r8674  
    11*SVN* 
     2 
     3* Performance: optimize route recognition. Large speedup for apps with many resource routes.  #10835 [oleganza] 
    24 
    35* Introduce TemplateFinder to handle view paths and lookups.  #10800 [Pratik Naik] 
  • trunk/actionpack/lib/action_controller/routing.rb

    r8652 r8674  
    88require 'action_controller/routing/builder' 
    99require 'action_controller/routing/route_set' 
     10require 'action_controller/routing/recognition_optimisation' 
    1011 
    1112module ActionController 
  • trunk/actionpack/lib/action_controller/routing/route_set.rb

    r8652 r8674  
    209209        @combined_regexp = nil 
    210210        @routes_by_controller = nil 
     211        # This will force routing/recognition_optimization.rb 
     212        # to refresh optimisations. 
     213        @compiled_recognize_optimized = nil 
    211214      end 
    212215 
     
    380383 
    381384      def recognize_path(path, environment={}) 
    382         routes.each do |route| 
    383           result = route.recognize(path, environment) and return result 
    384         end 
    385  
    386         allows = HTTP_METHODS.select { |verb| routes.find { |r| r.recognize(path, :method => verb) } } 
    387  
    388         if environment[:method] && !HTTP_METHODS.include?(environment[:method]) 
    389           raise NotImplemented.new(*allows) 
    390         elsif !allows.empty? 
    391           raise MethodNotAllowed.new(*allows) 
    392         else 
    393           raise RoutingError, "No route matches #{path.inspect} with #{environment.inspect}" 
    394         end 
     385        raise "Not optimized! Check that routing/recognition_optimisation overrides RouteSet#recognize_path." 
    395386      end 
    396387