1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
require File.expand_path("../../helper", __FILE__)
# This benchmark compares the timings of the friendly_id? and unfriendly_id? on various objects
#
# integer friendly_id? 6.370000 0.000000 6.370000 ( 6.380925)
# integer unfriendly_id? 6.640000 0.010000 6.650000 ( 6.646057)
# AR::Base friendly_id? 2.340000 0.000000 2.340000 ( 2.340743)
# AR::Base unfriendly_id? 2.560000 0.000000 2.560000 ( 2.560039)
# hash friendly_id? 5.090000 0.010000 5.100000 ( 5.097662)
# hash unfriendly_id? 5.430000 0.000000 5.430000 ( 5.437160)
# nil friendly_id? 5.610000 0.010000 5.620000 ( 5.611487)
# nil unfriendly_id? 5.870000 0.000000 5.870000 ( 5.880484)
# numeric string friendly_id? 9.270000 0.030000 9.300000 ( 9.308452)
# numeric string unfriendly_id? 9.190000 0.040000 9.230000 ( 9.252890)
# test_string friendly_id? 8.380000 0.010000 8.390000 ( 8.411762)
# test_string unfriendly_id? 8.450000 0.010000 8.460000 ( 8.463662)
# From the ObjectUtils docs...
# 123.friendly_id? #=> false
# :id.friendly_id? #=> false
# {:name => 'joe'}.friendly_id? #=> false
# ['name = ?', 'joe'].friendly_id? #=> false
# nil.friendly_id? #=> false
# "123".friendly_id? #=> nil
# "abc123".friendly_id? #=> true
Book = Class.new ActiveRecord::Base
test_integer = 123
test_active_record_object = Book.new
test_hash = {name: "joe"}
test_nil = nil
test_numeric_string = "123"
test_string = "abc123"
N = 5_000_000
Benchmark.bmbm do |x|
x.report("integer friendly_id?") { N.times { test_integer.friendly_id? } }
x.report("integer unfriendly_id?") { N.times { test_integer.unfriendly_id? } }
x.report("AR::Base friendly_id?") { N.times { test_active_record_object.friendly_id? } }
x.report("AR::Base unfriendly_id?") { N.times { test_active_record_object.unfriendly_id? } }
x.report("hash friendly_id?") { N.times { test_hash.friendly_id? } }
x.report("hash unfriendly_id?") { N.times { test_hash.unfriendly_id? } }
x.report("nil friendly_id?") { N.times { test_nil.friendly_id? } }
x.report("nil unfriendly_id?") { N.times { test_nil.unfriendly_id? } }
x.report("numeric string friendly_id?") { N.times { test_numeric_string.friendly_id? } }
x.report("numeric string unfriendly_id?") { N.times { test_numeric_string.unfriendly_id? } }
x.report("test_string friendly_id?") { N.times { test_string.friendly_id? } }
x.report("test_string unfriendly_id?") { N.times { test_string.unfriendly_id? } }
end
|