使用 benchmark-ips 量測程式執行時間

Juanito FatasThinking about what to do.

benchmark-ips 是由 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

排版精美,最棒的是會顯示標準偏差值,可以更好的了解量測結果。

:)