Encourage `Hash#compare_by_identity`
- Ngôn ngữ chính
- Ruby
- Star
- 5.7k
- Fork
- 371
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
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.
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.