From 3c356aa9ffca7d087a7d8a88f08df1e518816475 Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sun, 27 May 2007 19:16:09 +0000 Subject: Reduce file stat calls when checking for template changes. Closes #7736. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6871 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_view/base.rb | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'actionpack') diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 3151f05077..ef28e1b7bb 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Reduce file stat calls when checking for template changes. #7736 [alex] + * Added custom path cache_page/expire_page parameters in addition to the options hashes [DHH]. Example: def index diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb index f6885fa292..61d4bd7ad2 100644 --- a/actionpack/lib/action_view/base.rb +++ b/actionpack/lib/action_view/base.rb @@ -522,9 +522,10 @@ module ActionView #:nodoc: method_key = file_name || template render_symbol = @@method_names[method_key] - if @@compile_time[render_symbol] && supports_local_assigns?(render_symbol, local_assigns) + compile_time = @@compile_time[render_symbol] + if compile_time && supports_local_assigns?(render_symbol, local_assigns) if file_name && !@@cache_template_loading - template_changed_since?(file_name, @@compile_time[render_symbol]) + template_changed_since?(file_name, compile_time) end else true @@ -534,8 +535,9 @@ module ActionView #:nodoc: # Method to handle checking a whether a template has changed since last compile; isolated so that templates # not stored on the file system can hook and extend appropriately. def template_changed_since?(file_name, compile_time) - compile_time < File.mtime(file_name) || - (File.symlink?(file_name) && (compile_time < File.lstat(file_name).mtime)) + lstat = File.lstat(file_name) + compile_time < lstat.mtime || + (lstat.symlink? && compile_time < File.stat(file_name).mtime) end # Method to create the source code for a given template. -- cgit v1.2.3