aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods.rb
diff options
context:
space:
mode:
authorschneems <richard.schneeman@gmail.com>2015-07-24 00:46:12 -0500
committerschneems <richard.schneeman@gmail.com>2015-07-29 20:41:57 -0500
commitf80aa5994603e684e3fecd3f53bfbf242c73a107 (patch)
treea5fdee53086e9a9b9ea00361eccacf4b49ef25e7 /activerecord/lib/active_record/attribute_methods.rb
parent10e994cc07dbd4ff87db225f15850197a9c6bb18 (diff)
downloadrails-f80aa5994603e684e3fecd3f53bfbf242c73a107.tar.gz
rails-f80aa5994603e684e3fecd3f53bfbf242c73a107.tar.bz2
rails-f80aa5994603e684e3fecd3f53bfbf242c73a107.zip
Decrease string allocations on AR#respond_to?
When a symbol is passed in, we call `to_s` on it which allocates a string. The two hardcoded symbols that are used internally are `:to_partial_path` and `:to_model`. This change buys us 71,136 bytes of memory and 1,777 fewer objects per request.
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods.rb')
-rw-r--r--activerecord/lib/active_record/attribute_methods.rb10
1 files changed, 9 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/attribute_methods.rb b/activerecord/lib/active_record/attribute_methods.rb
index abe1d465a5..7fb899c242 100644
--- a/activerecord/lib/active_record/attribute_methods.rb
+++ b/activerecord/lib/active_record/attribute_methods.rb
@@ -230,7 +230,15 @@ module ActiveRecord
# person.respond_to(:nothing) # => false
def respond_to?(name, include_private = false)
return false unless super
- name = name.to_s
+
+ case name
+ when :to_partial_path
+ name = "to_partial_path".freeze
+ when :to_model
+ name = "to_model".freeze
+ else
+ name = name.to_s
+ end
# If the result is true then check for the select case.
# For queries selecting a subset of columns, return false for unselected columns.