Encourage `Hash#compare_by_identity`
- Langage dominant
- Ruby
- Étoiles
- 5.7k
- Forks
- 371
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
If one is using keys that can be compared by identity, and if those keys are not already optimized (symbols are optimized, not sure what else is), using `compare_by_identity` can yield a 4x speedup.
```ruby
require 'benchmark/ips'
KEY = Class.new
CACHE = {KEY => :foo}
CACHE_BY_ID = {KEY => :foo}.compare_by_identity
def fast
CACHE_BY_ID[KEY]
end
def slow
CACHE[KEY]
end
Benchmark.ips do |x|
x.report('lookup with compare_by_identity') { fast }
x.report('lookup') { slow }
x.compare!
end
```
```
lookup with compare_by_identity
10.781M (± 3.3%) i/s - 54.709M in 5.081038s
lookup 2.571M (± 3.2%) i/s - 13.089M in 5.097409s
Comparison:
lookup with compare_by_identity: 10781059.3 i/s
lookup: 2570641.2 i/s - 4.19x (± 0.00) slower
```
Same result if lookup is not successful (as long as the hash is not empty...)
I hope we can optimize this a bit.
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.