diff options
| author | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-14 18:01:12 -0800 | 
|---|---|---|
| committer | Aaron Patterson <aaron.patterson@gmail.com> | 2014-02-14 18:01:12 -0800 | 
| commit | bfc776f7bb114e90cf91f16f5892be636ed2f0c8 (patch) | |
| tree | a2e09840eaa58fb7ac01bf6db88443400bb915d5 /activemodel/lib/active_model/validations/numericality.rb | |
| parent | 4e823b61190388219868744a34dcfe926bad511c (diff) | |
| download | rails-bfc776f7bb114e90cf91f16f5892be636ed2f0c8.tar.gz rails-bfc776f7bb114e90cf91f16f5892be636ed2f0c8.tar.bz2 rails-bfc776f7bb114e90cf91f16f5892be636ed2f0c8.zip | |
add factory methods for empty alias trackers
If we know the alias tracker is empty, we can create one that doesn't
use a hash with default block for counting.
ActiveRecord::Base.establish_connection(adapter: 'sqlite3',
                                        database: ':memory:')
ActiveRecord::Schema.define do
  create_table :posts, force: true do |t|
    t.integer :comments_count
  end
  create_table :comments, force: true do |t|
    t.integer :post_id
  end
end
class Post < ActiveRecord::Base; has_many :comments; end
class Comment < ActiveRecord::Base; belongs_to :post, counter_cache: true; end
10.times { Comment.create!(post: Post.create!) }
record = Post.first
association_name = :comments
Benchmark.ips do |x|
  reflection = record.class.reflect_on_association(association_name)
  association = reflection.association_class.new(record, reflection)
  x.report('assoc') do
    reflection.association_class.new(record, reflection)
  end
  x.report('reader') do
    association.reader;nil
  end
  x.report('combined') do
    reflection.association_class.new(record, reflection).reader;nil
  end
end
[aaron@higgins rails (tracker)]$ TEST=ips bundle exec ruby ../1bb5456b5e035343df9d/gistfile1.rb
-- create_table(:posts, {:force=>true})
   -> 0.0062s
-- create_table(:comments, {:force=>true})
   -> 0.0003s
Calculating -------------------------------------
               assoc       833 i/100ms
              reader     28703 i/100ms
            combined       839 i/100ms
-------------------------------------------------
               assoc     9010.3 (±3.8%) i/s -      44982 in   5.000022s
              reader  3214523.4 (±5.5%) i/s -   16016274 in   5.001136s
            combined     8841.0 (±5.8%) i/s -      44467 in   5.049269s
[aaron@higgins rails (tracker)]$ TEST=ips bundle exec ruby ../1bb5456b5e035343df9d/gistfile1.rb
-- create_table(:posts, {:force=>true})
   -> 0.0060s
-- create_table(:comments, {:force=>true})
   -> 0.0003s
Calculating -------------------------------------
               assoc       888 i/100ms
              reader     29217 i/100ms
            combined       900 i/100ms
-------------------------------------------------
               assoc     9674.3 (±3.3%) i/s -      48840 in   5.054022s
              reader  2988474.8 (±6.9%) i/s -   14842236 in   4.998230s
            combined     9674.0 (±3.1%) i/s -      48600 in   5.028694s
Diffstat (limited to 'activemodel/lib/active_model/validations/numericality.rb')
0 files changed, 0 insertions, 0 deletions
