A Day in the Life

ruby の Net::HTTP と curb (curl の ruby binding) の単純な速度比較

ruby の Net::HTTP と curb (curl の ruby binding) の単純な速度比較

マラちゃん(懐かしいなこの呼び方)がLLごとのでとっていたので、Ruby だとどうなんだろうと思って curb と Net::HTTP とで測定。

$ ruby -I/usr/lib/ruby/gems/1.8/gems/curb-0.7.3/lib curb_get.rb
      user     system      total        real
  1.360000   3.960000   5.320000 (  8.025331)
  3.380000   6.130000   9.510000 ( 14.312267)

curb は user+systemだけだとだいたい Net::HTTP の倍ぐらいだなぁ。ただマラちゃんの書いてる perl の Curl ライブラリよりは2,3倍遅そう(詳しいオーバーヘッドは調べてない)

単純に URL を get したいだけなら

Curl::Easy.perform(url).body_str

で書けてシンプルなのもいいね>curb

コード

require 'curb'
require 'net/http'
require 'benchmark'

Net::HTTP.version_1_2

n = 10000

Benchmark.bm do |x|
  x.report {
    n.times do
      c = Curl::Easy.new('http://localhost/favicon.ico')
      c.perform
    end
  }
  x.report {
    n.times do
      Net::HTTP.start('localhost', 80) {|http| http.get('/favicon.ico') }
    end
  }
end
$ ruby --version
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]

curl のバージョンは 7.20.0。サーバは apache 2.2 の mpm worker で proxy 鯖ぽいセッティングで動かしてます。十分速いかどうかはしらない。