[benchmark-ips][bips] 是由 Puma 作者 Evan Phoenix(@evanphx)所写的 RubyGem。
$ gem install benchmark-ips
首先把库引入,接著用一个 Benchmark.ips do |x| ... end
区块包住要量测的代码,x
实现了一个 report
方法,负责量测代码。
require 'benchmark/ips'
Benchmark.ips do |x|
x.report("addition") { 1 + 2 }
x.report("addition2") do |times|
i = 0
while i < times
1 + 2
i += 1
end
end
x.report("addition3", "1 + 2")
end
report
第一个参数是字串,用来说明量测的是什么。后面放要量测的代码,可以区块、字串形式传入。
原先使用 Ruby 自带的 Benchmark 库,需要预测到底要执行几次,才可以得到信服的结果。
而次数又因各个开发者使用的机器而异。Benchmark-ips 很好的解决了这个问题。
Benchmark-ips 会在 5 秒内尽可能执行代码,告诉你 5 秒内代码可以执行几次(i/s,iteration per second)。
若想更改默认的 5 秒,譬如改成 20 秒:
Benchmark.ips(20) do |x|
...
end
上例执行结果:
Calculating -------------------------------------
addition 72783 i/100ms
addition2 68922 i/100ms
addition3 84483 i/100ms
-------------------------------------------------
addition 5085784.0 (±7.3%) i/s - 25255701 in 4.999724s
addition2 23843924.9 (±10.0%) i/s - 116960634 in 4.993053s
addition3 24357200.0 (±7.5%) i/s - 120726207 in 4.997873s
除了排版精美之外,最棒的是会显示标准偏差值,可以更好的了解量测结果。
:)