Permalink
Browse files

Went from 25% slower partials (vs. 2.3) to 10% faster. More to come.

  • Loading branch information...
wycats committed Aug 9, 2009
1 parent 930d235 commit 0ab40b039bf7b7882a31ab187916bc2dc5a8ae7c
@@ -70,9 +70,18 @@ def index
end
end
(ENV["M"] || 1).to_i.times do
Runner.run(BasePostController.action(:partial), N, 'partial')
Runner.run(BasePostController.action(:many_partials), N, 'many_partials')
Runner.run(BasePostController.action(:partial_collection), N, 'collection')
Runner.run(BasePostController.action(:show_template), N, 'template')
unless ENV["PROFILE"]
(ENV["M"] || 1).to_i.times do
Runner.run(BasePostController.action(:partial), N, 'partial')
Runner.run(BasePostController.action(:many_partials), N, 'many_partials')
Runner.run(BasePostController.action(:partial_collection), N, 'collection')
Runner.run(BasePostController.action(:show_template), N, 'template')
end
else
require "ruby-prof"
RubyProf.start
Runner.run(BasePostController.action(:many_partials), N, 'partial')
result = RubyProf.stop
printer = RubyProf::CallStackPrinter.new(result)
printer.print(File.open("output.html", "w"), :min_percent => 2)
end
@@ -177,6 +177,10 @@ def self.partial_names
@partial_names ||= Hash.new {|h,k| h[k] = ActiveSupport::ConcurrentHash.new }
end
def self.formats
@formats ||= Hash.new {|h,k| h[k] = Hash.new {|h,k| h[k] = {}}}
end
def initialize(view_context, options, block)
partial = options[:partial]
@@ -187,8 +191,8 @@ def initialize(view_context, options, block)
# Set up some instance variables to speed up memoizing
@partial_names = self.class.partial_names[@view.controller.class]
@templates = Hash.new {|h,k| h[k] = {}}
@formats_hash = view_context.formats.hash
@templates = self.class.formats
@details_hash = [view_context.formats, I18n.locale].hash
# Set up the object and path
@object = partial.is_a?(String) ? options[:object] : partial
@@ -248,7 +252,7 @@ def collection
def find_template(path = @path)
return if !path
@templates[path][@formats_hash] ||= begin
@templates[@details_hash][path][@view.controller_path] ||= begin
prefix = @view.controller.controller_path unless path.include?(?/)
@view.find(path, {:formats => @view.formats}, prefix, true)
end
@@ -30,12 +30,12 @@ def render(view, locals, &blk)
# TODO: Figure out how to abstract this
def variable_name
identifier[%r'_?(\w+)(\.\w+)*$', 1].to_sym
@variable_name ||= identifier[%r'_?(\w+)(\.\w+)*$', 1].to_sym
end
# TODO: Figure out how to abstract this
def counter_name
"#{variable_name}_counter".to_sym
@counter_name ||= "#{variable_name}_counter".to_sym
end
# TODO: kill hax

0 comments on commit 0ab40b0

Please sign in to comment.