Ставим: gem install fasterer, запускаем fasterer, можно передать в параметром адрес файла.
выдал Array#select.first is slower than Array#detect. проводим эксперимент:
require 'benchmark/ips'
data = [*0..100_000_000]
pp data.detect { | doc | doc > 1000 }
pp data.select { | doc | doc > 1000 }.first
Benchmark.ips do |x|
x.report('detect') {
data.detect { | doc | doc > 1000 }
}
x.report('select#select') {
data.select { | doc | doc > 1000 }.select
}
x.compare!
end
detect: 19387.9 i/s
select#select: 0.2 i/s - 87530.48x slower В рот мне ноги одним словом
gem 'benchmark-ips' для бренчмарка.
Всегда интересовало оператор безопасной навигации или пресловутый амперсанд перед вызовом метода на объекте сильно тормозит работу? оказываеться нет, вообще не тормозит, пихаем его везде:)
require "benchmark/ips"
HASH =Hash[*("a".."zzz").to_a.shuffle]
KEY = "zz"
def key_fast
HASH.keys.first.to_s
end
def key_slow
HASH&.keys&.first&.to_s
end
Benchmark.ips do |x|
x.report("Hash#&?") { key_slow }
x.report("Hash#_?") { key_fast }
x.compare!
end
bsearch вообще никогда не использовал, а оказалось он мега быстрый
require 'benchmark/ips'
data = [*0..100_000_000]
Benchmark.ips do |x|
x.report('find') { data.find { |number| number > 77_777_777 } }
x.report('bsearch') { data.bsearch { |number| number > 77_777_777 } }
x.compare!
end