aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/source_annotation_extractor.rb
diff options
context:
space:
mode:
authorJon Leighton <j@jonathanleighton.com>2012-10-12 12:33:11 +0100
committerJon Leighton <j@jonathanleighton.com>2012-10-12 12:33:11 +0100
commitf1765019ce9b6292f2264b4601dad5daaffe3a89 (patch)
tree6e89e88dc5c8f4771f34b3560709fa8096cec4bc /railties/lib/rails/source_annotation_extractor.rb
parent9e5f7cc62e9ef1e865c6eba28be69e935434f8e6 (diff)
downloadrails-f1765019ce9b6292f2264b4601dad5daaffe3a89.tar.gz
rails-f1765019ce9b6292f2264b4601dad5daaffe3a89.tar.bz2
rails-f1765019ce9b6292f2264b4601dad5daaffe3a89.zip
Don't allocate new strings in compiled attribute methods
This improves memory and performance without having to use symbols which present DoS problems. Thanks @headius and @tenderlove for the suggestion. Benchmark --------- require 'active_record' require 'benchmark/ips' ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:') class Post < ActiveRecord::Base connection.create_table :posts, force: true do |t| t.string :name end end post = Post.create name: 'omg' Benchmark.ips do |r| r.report('Post.new') { Post.new name: 'omg' } r.report('post.name') { post.name } r.report('post.name=') { post.name = 'omg' } r.report('Post.find(1).name') { Post.find(1).name } end Before ------ Calculating ------------------------------------- Post.new 1419 i/100ms post.name 7538 i/100ms post.name= 3024 i/100ms Post.find(1).name 243 i/100ms ------------------------------------------------- Post.new 20637.6 (±12.7%) i/s - 102168 in 5.039578s post.name 1167897.7 (±18.2%) i/s - 5186144 in 4.983077s post.name= 64305.6 (±9.6%) i/s - 317520 in 4.998720s Post.find(1).name 2678.8 (±10.8%) i/s - 13365 in 5.051265s After ----- Calculating ------------------------------------- Post.new 1431 i/100ms post.name 7790 i/100ms post.name= 3181 i/100ms Post.find(1).name 245 i/100ms ------------------------------------------------- Post.new 21308.8 (±12.2%) i/s - 105894 in 5.053879s post.name 1534103.8 (±2.1%) i/s - 7634200 in 4.979405s post.name= 67441.0 (±7.5%) i/s - 337186 in 5.037871s Post.find(1).name 2681.9 (±10.6%) i/s - 13475 in 5.084511s
Diffstat (limited to 'railties/lib/rails/source_annotation_extractor.rb')
0 files changed, 0 insertions, 0 deletions