aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/helpers/asset_tag_helper.rb
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-01-04 15:39:16 -0600
committerJoshua Peek <josh@joshpeek.com>2009-01-04 15:39:16 -0600
commitce706b4b9be03a3f2e7d11438e6550d64c5f4461 (patch)
tree13605db641ea72a85be74c1c8f93de4bfc10af83 /actionpack/lib/action_view/helpers/asset_tag_helper.rb
parentd2a1c2778e76ba30431121d0a9062272e0c90405 (diff)
downloadrails-ce706b4b9be03a3f2e7d11438e6550d64c5f4461.tar.gz
rails-ce706b4b9be03a3f2e7d11438e6550d64c5f4461.tar.bz2
rails-ce706b4b9be03a3f2e7d11438e6550d64c5f4461.zip
Cache AssetTag timestamps
Diffstat (limited to 'actionpack/lib/action_view/helpers/asset_tag_helper.rb')
-rw-r--r--actionpack/lib/action_view/helpers/asset_tag_helper.rb36
1 files changed, 31 insertions, 5 deletions
diff --git a/actionpack/lib/action_view/helpers/asset_tag_helper.rb b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
index a341b453ec..58f8cca6be 100644
--- a/actionpack/lib/action_view/helpers/asset_tag_helper.rb
+++ b/actionpack/lib/action_view/helpers/asset_tag_helper.rb
@@ -468,6 +468,22 @@ module ActionView
tag("img", options)
end
+ def self.cache_asset_timestamps
+ @@cache_asset_timestamps
+ end
+
+ # You can enable or disable the asset tag timestamps cache.
+ # With the cache enabled, the asset tag helper methods will make fewer
+ # expense file system calls. However this prevents you from modifying
+ # any asset files while the server is running.
+ #
+ # ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
+ def self.cache_asset_timestamps=(value)
+ @@cache_asset_timestamps = value
+ end
+
+ @@cache_asset_timestamps = true
+
private
# Add the the extension +ext+ if not present. Return full URLs otherwise untouched.
# Prefix with <tt>/dir/</tt> if lacking a leading +/+. Account for relative URL
@@ -526,18 +542,28 @@ module ActionView
end
end
+ @@asset_timestamps_cache = {}
+ @@asset_timestamps_cache_guard = Mutex.new
+
# Use the RAILS_ASSET_ID environment variable or the source's
# modification time as its cache-busting asset id.
def rails_asset_id(source)
if asset_id = ENV["RAILS_ASSET_ID"]
asset_id
else
- path = File.join(ASSETS_DIR, source)
-
- if File.exist?(path)
- File.mtime(path).to_i.to_s
+ if @@cache_asset_timestamps && (asset_id = @@asset_timestamps_cache[source])
+ asset_id
else
- ''
+ path = File.join(ASSETS_DIR, source)
+ asset_id = File.exist?(path) ? File.mtime(path).to_i.to_s : ''
+
+ if @@cache_asset_timestamps
+ @@asset_timestamps_cache_guard.synchronize do
+ @@asset_timestamps_cache[source] = asset_id
+ end
+ end
+
+ asset_id
end
end
end