aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew White <andrew.white@unboxed.co>2016-09-01 11:28:35 +0100
committerAndrew White <andrew.white@unboxed.co>2016-09-01 13:19:42 +0100
commit8c402ef425771c3dbb4659dd946714e69fdf5ce9 (patch)
tree5a9b64414baedcf1e2b92d389f6f34fb6a9970de
parent897ac0ed19e27f782bd3f5131a67b8c9a57f66d3 (diff)
downloadrails-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.rb2
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>.