aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-07-24 16:45:39 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-07-24 16:45:39 +0000
commit4f40b2d8fbcfb437a628a353eb281553fc840728 (patch)
tree67e6d5c4ccf2eabe7644e830122f721f747f60fa /actionpack/lib/action_view
parent3ccea931fac2872ffb26014592c036b5d137655f (diff)
downloadrails-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.rb6
-rw-r--r--actionpack/lib/action_view/partials.rb12
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?