diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-24 16:45:39 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-24 16:45:39 +0000 |
commit | 4f40b2d8fbcfb437a628a353eb281553fc840728 (patch) | |
tree | 67e6d5c4ccf2eabe7644e830122f721f747f60fa /actionpack/lib/action_view | |
parent | 3ccea931fac2872ffb26014592c036b5d137655f (diff) | |
download | rails-4f40b2d8fbcfb437a628a353eb281553fc840728.tar.gz rails-4f40b2d8fbcfb437a628a353eb281553fc840728.tar.bz2 rails-4f40b2d8fbcfb437a628a353eb281553fc840728.zip |
Improved performance of test app req/sec with ~10% refactoring the render method #1823 [Stefan Kaes]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1915 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r-- | actionpack/lib/action_view/base.rb | 6 | ||||
-rw-r--r-- | actionpack/lib/action_view/partials.rb | 12 |
2 files changed, 13 insertions, 5 deletions
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index 304d6bf1ed..7fc0c3b020 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -158,6 +158,7 @@ module ActionView #:nodoc: def initialize(base_path = nil, assigns_for_first_render = {}, controller = nil)#:nodoc: @base_path, @assigns = base_path, assigns_for_first_render + @assigns_added = nil @controller = controller @logger = controller && controller.logger end @@ -280,7 +281,10 @@ module ActionView #:nodoc: end def evaluate_assigns(local_assigns = {}) - @assigns.each { |key, value| instance_variable_set("@#{key}", value) } + unless @assigns_added + @assigns.each { |key, value| instance_variable_set("@#{key}", value) } + @assigns_added = true + end saved_locals = {} local_assigns.each do |key, value| diff --git a/actionpack/lib/action_view/partials.rb b/actionpack/lib/action_view/partials.rb index e078c52262..be9d40ca53 100644 --- a/actionpack/lib/action_view/partials.rb +++ b/actionpack/lib/action_view/partials.rb @@ -46,21 +46,25 @@ module ActionView # This will render the partial "advertisement/_ad.rhtml" regardless of which controller this is being called from. module Partials # Deprecated, use render :partial - def render_partial(partial_path, local_assigns = {}, deprecated_local_assigns = {}) #:nodoc: + def render_partial(partial_path, local_assigns = nil, deprecated_local_assigns = nil) #:nodoc: path, partial_name = partial_pieces(partial_path) object = extracting_object(partial_name, local_assigns, deprecated_local_assigns) local_assigns = extract_local_assigns(local_assigns, deprecated_local_assigns) + local_assigns = local_assigns ? local_assigns.clone : {} add_counter_to_local_assigns!(partial_name, local_assigns) + local_assigns[partial_name] = object - render("#{path}/_#{partial_name}", { partial_name => object }.merge(local_assigns)) + render("#{path}/_#{partial_name}", local_assigns) end # Deprecated, use render :partial, :collection - def render_partial_collection(partial_name, collection, partial_spacer_template = nil, local_assigns = {}) #:nodoc: + def render_partial_collection(partial_name, collection, partial_spacer_template = nil, local_assigns = nil) #:nodoc: collection_of_partials = Array.new counter_name = partial_counter_name(partial_name) + local_assigns = local_assigns ? local_assigns.clone : {} collection.each_with_index do |element, counter| - collection_of_partials.push(render_partial(partial_name, element, { counter_name => counter }.merge(local_assigns))) + local_assigns[counter_name] = counter + collection_of_partials.push(render_partial(partial_name, element, local_assigns)) end return nil if collection_of_partials.empty? |