diff options
author | schneems <richard.schneeman@gmail.com> | 2015-07-24 00:46:12 -0500 |
---|---|---|
committer | schneems <richard.schneeman@gmail.com> | 2015-07-29 20:41:57 -0500 |
commit | f80aa5994603e684e3fecd3f53bfbf242c73a107 (patch) | |
tree | a5fdee53086e9a9b9ea00361eccacf4b49ef25e7 /activerecord | |
parent | 10e994cc07dbd4ff87db225f15850197a9c6bb18 (diff) | |
download | rails-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')
-rw-r--r-- | activerecord/lib/active_record/attribute_methods.rb | 10 |
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. |