fastruby / fastruby/fast-ruby

Encourage `Hash#compare_by_identity`

Ouverte
#189 2 commentaires 2 réactions 0 personnes assignées Voir sur GitHub
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.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.