Rubyの処理速度を確認したい時に使うGem【Benchmark-ips】
プログラムを組んでいると, 処理速度が気になったりします.
私もつい最近, 画面レスポンスが遅い処理を何とかしたくて試行錯誤したので, その時に使ったライブラリを紹介したいと思います.
それが, Rubyの処理速度を比較できる"Benchmark-ips"です.
早速使い方を見ていこうと思います.
Benchmark-ips
Benchmark-ipsは, RubyGem(Rubyのライブラリ)の一種です.
Githubはこちら.
使い方
まずはインストールです.
$ gem install benchmark-ips
次にRubyファイルでライブラリのロードを行い, Benchmark.ipsのブロック内に比較対象の処理を書いていきます.
require 'benchmark/ips'
Benchmark.ips do |x|
x.report("each"){
arr = [1,2,3]
result = []
arr.each do |a|
result << a += 1
end
}
x.report("map"){
arr = [1,2,3]
result =
arr.map do |a|
a += 1
end
}
x.compare!
end
上記はeachメソッドとmapメソッドそれぞれで, Arrayの各要素をインクリメントする処理を比較しています.
reportのブロック内に処理を書いていきます.
そして最後のcompare!によって処理速度順位が表示されます.
実際の実行結果を見てみましょう.
実行結果
Warming up --------------------------------------
each 249.932k i/100ms
map 290.791k i/100ms
Calculating -------------------------------------
each 2.544M (± 2.9%) i/s - 12.747M in 5.013943s
map 2.871M (± 5.2%) i/s - 14.540M in 5.083873s
Comparison:
map: 2870637.0 i/s
each: 2544485.1 i/s - 1.13x (± 0.00) slower
実行結果の見方を説明していきます.
Warming upから始まるのが100ms(ミリ秒)あたりの反復回数です.
Calculatingから始まるのが1s(秒)あたりの反復回数, すなわち1秒間に何回処理できるかを表します.
そしてComparisonから始まるのが, それぞれの処理のランキングです.
上記でいうとmapメソッドを使用した方が, より多く処理を反復できる(2.871M回)
また, eachメソッドの方はmapメソッドの1.13倍遅いということが分かります.
このように, Benchmark-ipsを使うことで処理速度比較ができ, 最適な処理選択の一助になりそうです.
ディスカッション
コメント一覧
まだ、コメントがありません