diff options
author | Yehuda Katz <wycats@gmail.com> | 2009-08-09 01:37:03 -0300 |
---|---|---|
committer | Yehuda Katz <wycats@gmail.com> | 2009-08-09 04:12:08 -0300 |
commit | 33f01fb1f6e0bf850e9366ef8203c4c944c27540 (patch) | |
tree | f42ab7b27049afca24289ab3b7e7720e93980b19 /actionpack/lib/action_view | |
parent | 0ab40b039bf7b7882a31ab187916bc2dc5a8ae7c (diff) | |
download | rails-33f01fb1f6e0bf850e9366ef8203c4c944c27540.tar.gz rails-33f01fb1f6e0bf850e9366ef8203c4c944c27540.tar.bz2 rails-33f01fb1f6e0bf850e9366ef8203c4c944c27540.zip |
Cache some more things to improve partial perf
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r-- | actionpack/lib/action_view/render/partials.rb | 6 | ||||
-rw-r--r-- | actionpack/lib/action_view/template/template.rb | 8 |
2 files changed, 9 insertions, 5 deletions
diff --git a/actionpack/lib/action_view/render/partials.rb b/actionpack/lib/action_view/render/partials.rb index 7a8c943b05..64f08c447d 100644 --- a/actionpack/lib/action_view/render/partials.rb +++ b/actionpack/lib/action_view/render/partials.rb @@ -178,7 +178,7 @@ module ActionView end def self.formats - @formats ||= Hash.new {|h,k| h[k] = Hash.new {|h,k| h[k] = {}}} + @formats ||= Hash.new {|h,k| h[k] = Hash.new{|h,k| h[k] = Hash.new {|h,k| h[k] = {}}}} end def initialize(view_context, options, block) @@ -192,7 +192,7 @@ module ActionView # Set up some instance variables to speed up memoizing @partial_names = self.class.partial_names[@view.controller.class] @templates = self.class.formats - @details_hash = [view_context.formats, I18n.locale].hash + @format = view_context.formats # Set up the object and path @object = partial.is_a?(String) ? options[:object] : partial @@ -252,7 +252,7 @@ module ActionView def find_template(path = @path) return if !path - @templates[@details_hash][path][@view.controller_path] ||= begin + @templates[path][@view.controller_path][@format][I18n.locale] ||= begin prefix = @view.controller.controller_path unless path.include?(?/) @view.find(path, {:formats => @view.formats}, prefix, true) end diff --git a/actionpack/lib/action_view/template/template.rb b/actionpack/lib/action_view/template/template.rb index abe310b758..33d3f79ad3 100644 --- a/actionpack/lib/action_view/template/template.rb +++ b/actionpack/lib/action_view/template/template.rb @@ -7,19 +7,22 @@ require "action_view/template/resolver" module ActionView class Template extend TemplateHandlers - attr_reader :source, :identifier, :handler, :mime_type, :details + attr_reader :source, :identifier, :handler, :mime_type, :formats, :details def initialize(source, identifier, handler, details) @source = source @identifier = identifier @handler = handler @details = details + @method_names = {} format = details.delete(:format) || begin # TODO: Clean this up handler.respond_to?(:default_format) ? handler.default_format.to_sym.to_s : "html" end @mime_type = Mime::Type.lookup_by_extension(format.to_s) + @formats = [format.to_sym] + @formats << :html if format == :js @details[:formats] = Array.wrap(format.to_sym) end @@ -90,7 +93,8 @@ module ActionView def build_method_name(locals) # TODO: is locals.keys.hash reliably the same? - "_render_template_#{@identifier.hash}_#{__id__}_#{locals.keys.hash}".gsub('-', "_") + @method_names[locals.keys.hash] ||= + "_render_template_#{@identifier.hash}_#{__id__}_#{locals.keys.hash}".gsub('-', "_") end end end |