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 鯖ぽいセッティングで動かしてます。十分速いかどうかはしらない。

記事の一覧 >

関連するかもエントリー

Ruby の http ライブラリの通信を表示する http-dump を作った
f:id:secondlife:20140110170809p:plainRuby 上で http を叩いた通信見たい時に、毎回同じ事をやってるので抽象化して http-dump というライブラリを作った。https://github.com/hotchpotch/http-du...
f:id:secondlife:20140110170809p:plainRuby 上で http を叩いた通信見たい時に、毎回同じ事をやっ...
Ruby で並列実行処理を簡単に書く
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティブスレッドの実行は一つのため、マルチコアを生かした処理をかんたんに書くのがいささか面倒だったりしますね。で、 parallel というライブ...
Ruby で並列実行処理を簡単に書くRuby は 1.8 だとグリーンスレッドだし、1.9 でも Giant VM lock のためネイティ...
Ruby を 1.9.3 p327 から 2.0.0 dev に上げたら Rails の起動時間が2.5倍速、rake spec の速度が1.8倍速になった
Ruby を 1.9.3 p327 から 2.0.0 dev に上げたら Rails の起動時間が2.5倍速、rake spec の速度が1.8倍速になった流しのフェローが Ruby 2.0.0 速いって言ってたので、いやいや速いっていっても〜、と思って社内の Ruby 1.9....
Ruby を 1.9.3 p327 から 2.0.0 dev に上げたら Rails の起動時間が2.5倍速、rake spec の速度が1...