size,count,empty? のパフォーマンスを確認する
size,count,empty? のパフォーマンスを確認をしてみる。
require "benchmark" count = 1000_000 ar = [1, 2, 3, 4, 5] Benchmark.bm(10) do |x| # 10はラベルの為に確保する長さ x.report("size") do count.times do ar.empty? end end x.report("count") do count.times do ar.count == 0 end end x.report("length") do count.times do ar.length == 0 end end end
- 実行結果
user system total real size 0.040000 0.000000 0.040000 ( 0.048787) count 0.060000 0.000000 0.060000 ( 0.058087) length 0.040000 0.000000 0.040000 ( 0.045684)
- 1回あたりの実行時間を nano sec に直してみる。
size 48.787[nano sec] count 58.087[nano sec] length 45.684[nano sec]
参考資料のNumbers Everyone Should Know - High Scalability -によると、Send 2K bytes over 1 Gbps network 20,000 ns
すなわち、2K bytes のデータを 1Gbpsのネットワークで送信した場合 20[micro sec] かかるということなので、
普通の web application を作っているのならば、これらのメソッドの速度の違いはあまり気にする必要はなさそうだ。
また、Railsのアプリケーションログを見てみると、ざっくりこんな感じで1リクエスト毎にms単位の時間がかかっている。
I, [2019-01-10T12:30:21.152318 #21603] INFO -- : [2236aa74-e13c-475e-a42c-5a87dc7fba51] Completed 200 OK in 143ms (Views: 0.4ms | ActiveRecord: 12.7ms)
これと比較したらメソッド毎の nano sec 単位の実行速度の違いなど誤差の範囲である。