Skip to content

Instantly share code, notes, and snippets.

@urbanautomaton
Last active February 21, 2018 21:03
Show Gist options
  • Save urbanautomaton/7051549d5873964a878d5af3b8a7da1c to your computer and use it in GitHub Desktop.
Save urbanautomaton/7051549d5873964a878d5af3b8a7da1c to your computer and use it in GitHub Desktop.
Perf analysis of `Performance/HashEachMethods` cop
require 'securerandom'
require 'benchmark/ips'
hash = {}
1000.times do
hash[SecureRandom.uuid] = SecureRandom.uuid
end
array = hash.to_a
Benchmark.ips do |x|
x.report("hash.each do |k, _|") do
hash.each do |k, _|
k
end
end
x.report("hash.each do |_, v|") do
hash.each do |_, v|
v
end
end
x.report("hash.each_key do |k|") do
hash.each_key do |k|
k
end
end
x.report("hash.each_value do |v|") do
hash.each_value do |v|
v
end
end
x.compare!
end
Benchmark.ips do |x|
x.report("array.each do |k, _|") do
array.each do |k, _|
k
end
end
x.report("array.each do |_, v|") do
array.each do |_, v|
v
end
end
x.report("array.each do |(k, _)|") do
array.each do |(k, _)|
k
end
end
x.report("array.each do |(_, v)|") do
array.each do |(_, v)|
v
end
end
x.compare!
end
Warming up --------------------------------------
hash.each do |k, _| 1.427k i/100ms
hash.each do |_, v| 1.395k i/100ms
hash.each_key do |k| 1.441k i/100ms
hash.each_value do |v|
1.473k i/100ms
Calculating -------------------------------------
hash.each do |k, _| 13.932k (± 6.4%) i/s - 69.923k in 5.038565s
hash.each do |_, v| 14.688k (± 4.5%) i/s - 73.935k in 5.044267s
hash.each_key do |k| 16.219k (± 4.2%) i/s - 82.137k in 5.073343s
hash.each_value do |v|
16.176k (± 6.4%) i/s - 81.015k in 5.034800s
Comparison:
hash.each_key do |k|: 16219.5 i/s
hash.each_value do |v|: 16175.6 i/s - same-ish: difference falls within error
hash.each do |_, v|: 14687.5 i/s - 1.10x slower
hash.each do |k, _|: 13932.4 i/s - 1.16x slower
Warming up --------------------------------------
array.each do |k, _| 1.996k i/100ms
array.each do |_, v| 1.983k i/100ms
array.each do |(k, _)|
1.867k i/100ms
array.each do |(_, v)|
1.903k i/100ms
Calculating -------------------------------------
array.each do |k, _| 19.611k (± 4.7%) i/s - 99.800k in 5.100368s
array.each do |_, v| 19.239k (± 5.6%) i/s - 97.167k in 5.067313s
array.each do |(k, _)|
18.622k (± 5.6%) i/s - 93.350k in 5.029384s
array.each do |(_, v)|
18.081k (± 5.9%) i/s - 91.344k in 5.070445s
Comparison:
array.each do |k, _|: 19611.5 i/s
array.each do |_, v|: 19238.6 i/s - same-ish: difference falls within error
array.each do |(k, _)|: 18621.9 i/s - same-ish: difference falls within error
array.each do |(_, v)|: 18080.8 i/s - same-ish: difference falls within error
Warming up --------------------------------------
hash.each do |k, _| 1.504k i/100ms
hash.each do |_, v| 1.516k i/100ms
hash.each_key do |k| 1.732k i/100ms
hash.each_value do |v|
1.845k i/100ms
Calculating -------------------------------------
hash.each do |k, _| 16.026k (± 2.8%) i/s - 81.216k in 5.071822s
hash.each do |_, v| 15.805k (± 6.6%) i/s - 78.832k in 5.017760s
hash.each_key do |k| 18.245k (± 4.9%) i/s - 91.796k in 5.044159s
hash.each_value do |v|
17.658k (± 5.9%) i/s - 88.560k in 5.033126s
Comparison:
hash.each_key do |k|: 18244.7 i/s
hash.each_value do |v|: 17657.8 i/s - same-ish: difference falls within error
hash.each do |k, _|: 16025.8 i/s - 1.14x slower
hash.each do |_, v|: 15804.8 i/s - 1.15x slower
Warming up --------------------------------------
array.each do |k, _| 2.497k i/100ms
array.each do |_, v| 2.455k i/100ms
array.each do |(k, _)|
2.173k i/100ms
array.each do |(_, v)|
2.146k i/100ms
Calculating -------------------------------------
array.each do |k, _| 25.050k (± 2.9%) i/s - 127.347k in 5.088374s
array.each do |_, v| 24.868k (± 2.5%) i/s - 125.205k in 5.038083s
array.each do |(k, _)|
21.744k (± 3.4%) i/s - 108.650k in 5.003050s
array.each do |(_, v)|
21.706k (± 3.4%) i/s - 109.446k in 5.048154s
Comparison:
array.each do |k, _|: 25049.8 i/s
array.each do |_, v|: 24867.7 i/s - same-ish: difference falls within error
array.each do |(k, _)|: 21744.2 i/s - 1.15x slower
array.each do |(_, v)|: 21706.4 i/s - 1.15x slower
Warming up --------------------------------------
hash.each do |k, _| 2.330k i/100ms
hash.each do |_, v| 2.182k i/100ms
hash.each_key do |k| 2.240k i/100ms
hash.each_value do |v|
2.345k i/100ms
Calculating -------------------------------------
hash.each do |k, _| 22.848k (± 4.9%) i/s - 114.170k in 5.009208s
hash.each do |_, v| 22.620k (± 5.1%) i/s - 113.464k in 5.029007s
hash.each_key do |k| 23.297k (± 5.2%) i/s - 116.480k in 5.013482s
hash.each_value do |v|
22.473k (± 4.9%) i/s - 112.560k in 5.020628s
Comparison:
hash.each_key do |k|: 23297.0 i/s
hash.each do |k, _|: 22847.6 i/s - same-ish: difference falls within error
hash.each do |_, v|: 22620.4 i/s - same-ish: difference falls within error
hash.each_value do |v|: 22473.5 i/s - same-ish: difference falls within error
Warming up --------------------------------------
array.each do |k, _| 2.197k i/100ms
array.each do |_, v| 2.178k i/100ms
array.each do |(k, _)|
1.863k i/100ms
array.each do |(_, v)|
1.946k i/100ms
Calculating -------------------------------------
array.each do |k, _| 22.343k (± 4.8%) i/s - 112.047k in 5.026678s
array.each do |_, v| 23.139k (± 4.8%) i/s - 115.434k in 5.000323s
array.each do |(k, _)|
19.211k (± 4.4%) i/s - 96.876k in 5.052660s
array.each do |(_, v)|
20.029k (± 5.6%) i/s - 101.192k in 5.068734s
Comparison:
array.each do |_, v|: 23139.3 i/s
array.each do |k, _|: 22342.9 i/s - same-ish: difference falls within error
array.each do |(_, v)|: 20028.9 i/s - 1.16x slower
array.each do |(k, _)|: 19210.9 i/s - 1.20x slower
Warming up --------------------------------------
hash.each do |k, _| 2.133k i/100ms
hash.each do |_, v| 1.981k i/100ms
hash.each_key do |k| 2.173k i/100ms
hash.each_value do |v|
2.119k i/100ms
Calculating -------------------------------------
hash.each do |k, _| 21.165k (± 5.5%) i/s - 106.650k in 5.054973s
hash.each do |_, v| 20.046k (± 4.9%) i/s - 101.031k in 5.052132s
hash.each_key do |k| 20.912k (± 6.3%) i/s - 104.304k in 5.007624s
hash.each_value do |v|
20.806k (± 6.0%) i/s - 103.831k in 5.008755s
Comparison:
hash.each do |k, _|: 21164.5 i/s
hash.each_key do |k|: 20912.4 i/s - same-ish: difference falls within error
hash.each_value do |v|: 20805.6 i/s - same-ish: difference falls within error
hash.each do |_, v|: 20046.3 i/s - same-ish: difference falls within error
Warming up --------------------------------------
array.each do |k, _| 1.996k i/100ms
array.each do |_, v| 1.941k i/100ms
array.each do |(k, _)|
1.682k i/100ms
array.each do |(_, v)|
1.713k i/100ms
Calculating -------------------------------------
array.each do |k, _| 19.417k (± 5.0%) i/s - 97.804k in 5.049637s
array.each do |_, v| 19.945k (± 5.6%) i/s - 100.932k in 5.076490s
array.each do |(k, _)|
17.511k (± 4.3%) i/s - 87.464k in 5.004078s
array.each do |(_, v)|
18.023k (± 4.2%) i/s - 90.789k in 5.046341s
Comparison:
array.each do |_, v|: 19944.6 i/s
array.each do |k, _|: 19416.7 i/s - same-ish: difference falls within error
array.each do |(_, v)|: 18023.1 i/s - 1.11x slower
array.each do |(k, _)|: 17511.2 i/s - 1.14x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment