Permalink
Browse files

Cache AssetTag timestamps

  • Loading branch information...
1 parent e14909d commit 255c6564efae5241f3afe2f901aac3cbb85109c4 @josh josh committed with dhh Jan 4, 2009
@@ -10,6 +10,8 @@ def define_dispatcher_callbacks(cache_classes)
# Development mode callbacks
before_dispatch :reload_application
after_dispatch :cleanup_application
+
+ ActionView::Helpers::AssetTagHelper.cache_asset_timestamps = false
end
# Common callbacks
@@ -462,6 +462,22 @@ def image_tag(source, options = {})
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
@@ -520,18 +536,28 @@ def compute_asset_host(source)
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

0 comments on commit 255c656

Please sign in to comment.