webrickとrackとcgi.rbでベンチマーク

Rubyも2.0になったし、久しぶりに上の3つのライブラリで
CGIのパフォーマンスを測ってみた。
ちなみに、2.1devでやってみています。2.0とさほどかわらんだろ。

webrick

require 'webrick/cgi'
class MyCGI < WEBrick::CGI
  def do_GET(req, res)
    res["content-type"] = "text/plain"
    ret = "Hello, Webrick\n"
    res.body = ret
  end
end
MyCGI.new.start()

rack

require 'rack'
include Rack
class HelloRack
  def call(env)
    [200, {"Content-Type" => "text/plain"}, ["Hello, Rack"]]
  end
end
Handler::CGI.run HelloRack.new

cgi.rb

require 'cgi'
cgi=CGI.new("html3")
cgi.out({"type"=>"text/plain"}) do
  "Hello, cgi.rb"
end

 
コードは上のコードです。
apache benchで

ab -n 200 -c 25 http://localhost/~fujioka/...

とやって比較してみると、
1秒間にさばけるリクエスト数が、

webrick rack(CGI) cgi.rb
24.41 18.82 55.22

うちのMacではこんな感じでした。
シンプルなcgiではcgi.rbが速いのは当然なのですが、
以前と比較すると、相対的にwebrickが早くなっています。
require が速くなったからですかね。