fastruby / fastruby/fast-ruby

Encourage `Hash#compare_by_identity`

未关闭
#189 2 条评论 2 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Ruby
星标
5.7k
派生
371
PR 合并指标
30 天内没有已合并 PR

描述

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.

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。