diff options
author | Andrew White <andrew.white@unboxed.co> | 2016-09-01 11:28:35 +0100 |
---|---|---|
committer | Andrew White <andrew.white@unboxed.co> | 2016-09-01 13:19:42 +0100 |
commit | 8c402ef425771c3dbb4659dd946714e69fdf5ce9 (patch) | |
tree | 5a9b64414baedcf1e2b92d389f6f34fb6a9970de | |
parent | 897ac0ed19e27f782bd3f5131a67b8c9a57f66d3 (diff) | |
download | rails-8c402ef425771c3dbb4659dd946714e69fdf5ce9.tar.gz rails-8c402ef425771c3dbb4659dd946714e69fdf5ce9.tar.bz2 rails-8c402ef425771c3dbb4659dd946714e69fdf5ce9.zip |
Cache to_datetime for performance
As demonstrated in #25880 the to_time method converts the utc time
instance to a local time instance which is an expensive operation.
Since to_datetime involves similar expensive operations we should
also cache it to speed up comparison with lots of values.
-rw-r--r-- | activesupport/lib/active_support/time_with_zone.rb | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/time_with_zone.rb b/activesupport/lib/active_support/time_with_zone.rb index 74c4a39342..be2fceb123 100644 --- a/activesupport/lib/active_support/time_with_zone.rb +++ b/activesupport/lib/active_support/time_with_zone.rb @@ -406,7 +406,7 @@ module ActiveSupport # Time.zone.now.to_datetime # => Tue, 18 Aug 2015 02:32:20 +0000 # Time.current.in_time_zone('Hawaii').to_datetime # => Mon, 17 Aug 2015 16:32:20 -1000 def to_datetime - utc.to_datetime.new_offset(Rational(utc_offset, 86_400)) + @to_datetime ||= utc.to_datetime.new_offset(Rational(utc_offset, 86_400)) end # So that +self+ <tt>acts_like?(:time)</tt>. |