Skip to content

Commit 0681495

Browse files
didelerJuanitoFatas
authored andcommitted
Also benchmark the more common Hash#[] && style
1 parent a1b2ca2 commit 0681495

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

README.md

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -597,24 +597,27 @@ Comparison:
597597
$ ruby -v code/hash/dig-vs-\[\]-vs-fetch.rb
598598
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
599599
Warming up --------------------------------------
600-
Hash#dig 144.192k i/100ms
601-
Hash#[] 148.853k i/100ms
602-
Hash#[] fallback 149.761k i/100ms
603-
Hash#fetch 132.257k i/100ms
604-
Hash#fetch fallback 120.420k i/100ms
600+
Hash#dig 142.217k i/100ms
601+
Hash#[] 153.313k i/100ms
602+
Hash#[] || 145.380k i/100ms
603+
Hash#[] && 121.401k i/100ms
604+
Hash#fetch 137.236k i/100ms
605+
Hash#fetch fallback 120.010k i/100ms
605606
Calculating -------------------------------------
606-
Hash#dig 6.253M (± 5.9%) i/s - 31.145M
607-
Hash#[] 6.733M (± 5.9%) i/s - 33.641M
608-
Hash#[] fallback 6.209M (± 5.7%) i/s - 31.001M
609-
Hash#fetch 4.500M (± 5.0%) i/s - 22.484M
610-
Hash#fetch fallback 3.330M (± 4.7%) i/s - 16.618M
607+
Hash#dig 6.216M (± 6.2%) i/s - 31.003M
608+
Hash#[] 6.676M (± 6.3%) i/s - 33.269M
609+
Hash#[] || 6.160M (± 6.2%) i/s - 30.675M
610+
Hash#[] && 3.096M (± 5.4%) i/s - 15.539M
611+
Hash#fetch 4.425M (± 5.5%) i/s - 22.095M
612+
Hash#fetch fallback 3.279M (± 5.3%) i/s - 16.441M
611613
612614
Comparison:
613-
Hash#[]: 6732624.6 i/s
614-
Hash#dig: 6252809.1 i/s - same-ish: difference falls within error
615-
Hash#[] fallback: 6209365.5 i/s - same-ish: difference falls within error
616-
Hash#fetch: 4499831.0 i/s - 1.50x slower
617-
Hash#fetch fallback: 3330397.7 i/s - 2.02x slower
615+
Hash#[]: 6676415.9 i/s
616+
Hash#dig: 6215966.7 i/s - same-ish: difference falls within error
617+
Hash#[] ||: 6160177.6 i/s - same-ish: difference falls within error
618+
Hash#fetch: 4424551.0 i/s - 1.51x slower
619+
Hash#fetch fallback: 3278599.3 i/s - 2.04x slower
620+
Hash#[] &&: 3096090.4 i/s - 2.16x slower
618621
```
619622

620623
##### `Hash[]` vs `Hash#dup` [code](code/hash/bracket-vs-dup.rb)

code/hash/dig-vs-[]-vs-fetch.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111
h[:a][:b][:c][:d][:e]
1212
end
1313

14-
x.report 'Hash#[] fallback' do
14+
x.report 'Hash#[] ||' do
1515
((((h[:a] || {})[:b] || {})[:c] || {})[:d] || {})[:e]
1616
end
1717

18+
x.report 'Hash#[] &&' do
19+
h[:a] && h[:a][:b] && h[:a][:b][:c] && h[:a][:b][:c][:d] && h[:a][:b][:c][:d][:e]
20+
end
21+
1822
x.report 'Hash#fetch' do
1923
h.fetch(:a).fetch(:b).fetch(:c).fetch(:d).fetch(:e)
2024
end

0 commit comments

Comments
 (0)