aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/template/resolver.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-10-07 15:50:20 +0200
committerJosé Valim <jose.valim@gmail.com>2010-10-07 21:31:31 +0200
commitb2600bfc181664fcfe448d100ca054017b0576dd (patch)
treefab6f7d40c19288ef2447266eedefb0527ed7167 /actionpack/lib/action_view/template/resolver.rb
parentad13eb72959f685927b5212ed387d51142d51805 (diff)
downloadrails-b2600bfc181664fcfe448d100ca054017b0576dd.tar.gz
rails-b2600bfc181664fcfe448d100ca054017b0576dd.tar.bz2
rails-b2600bfc181664fcfe448d100ca054017b0576dd.zip
Remove locals dependency from template.
This means that templates does not need to store its source anymore, allowing us to reduce the ammount of memory taken by our Rails processes. Naively speaking, if your app/views contains 2MB of files, each of your processes (after being hit by a bunch of requests) will take 2MB less of memory after this commit. This is extremely important for the upcoming features. Since Rails will also render CSS and JS files, their source won't be stored as well allowing us to decrease the ammount of memory taken.
Diffstat (limited to 'actionpack/lib/action_view/template/resolver.rb')
-rw-r--r--actionpack/lib/action_view/template/resolver.rb30
1 files changed, 23 insertions, 7 deletions
diff --git a/actionpack/lib/action_view/template/resolver.rb b/actionpack/lib/action_view/template/resolver.rb
index a031d0dc33..9ec39b16f0 100644
--- a/actionpack/lib/action_view/template/resolver.rb
+++ b/actionpack/lib/action_view/template/resolver.rb
@@ -6,8 +6,8 @@ module ActionView
# = Action View Resolver
class Resolver
def initialize
- @cached = Hash.new { |h1,k1| h1[k1] =
- Hash.new { |h2,k2| h2[k2] = Hash.new { |h3, k3| h3[k3] = {} } } }
+ @cached = Hash.new { |h1,k1| h1[k1] = Hash.new { |h2,k2|
+ h2[k2] = Hash.new { |h3,k3| h3[k3] = Hash.new { |h4,k4| h4[k4] = {} } } } }
end
def clear_cache
@@ -15,8 +15,8 @@ module ActionView
end
# Normalizes the arguments and passes it on to find_template.
- def find_all(name, prefix=nil, partial=false, details={}, key=nil)
- cached(key, prefix, name, partial) do
+ def find_all(name, prefix=nil, partial=false, details={}, locals=[], key=nil)
+ cached(key, prefix, name, partial, locals) do
find_templates(name, prefix, partial, details)
end
end
@@ -51,9 +51,25 @@ module ActionView
[handler, format]
end
- def cached(key, prefix, name, partial)
- return yield unless key && caching?
- @cached[key][prefix][name][partial] ||= yield
+ def cached(key, prefix, name, partial, locals)
+ locals = sort_locals(locals)
+ unless key && caching?
+ yield.each { |t| t.locals = locals }
+ else
+ @cached[key][prefix][name][partial][locals] ||= yield.each { |t| t.locals = locals }
+ end
+ end
+
+ if :locale.respond_to?("<=>")
+ def sort_locals(locals)
+ locals.sort.freeze
+ end
+ else
+ def sort_locals(locals)
+ locals = locals.map{ |l| l.to_s }
+ locals.sort!
+ locals.freeze
+ end
end
end