webrickとrackとcgi.rbでベンチマーク
札幌Ruby会議03で咳さんからrackなんて
なんで必要なの?っていう話があって、
自分の無知をさらけ出してしまったので、
webrickを利用がてら、ベンチしてみました。
まず、webrickのドキュメントを読みながら
作ってみると、
#!/usr/bin/env ruby require 'webrick/cgi' class MyCGI < WEBrick::CGI def do_GET(req, res) res["content-type"] = "text/plain" ret = "hello world\n" res.body = ret end end MyCGI.new.start()
これで動きます。
なんかrackと似てますね。
同じことをrackでやると、
#!/usr/bin/env ruby require 'rack' include Rack class HelloRack def call(env) [200, {"Content-Type" => "text/plain"}, ["hello world"]] end end Handler::CGI.run HelloRack.new
cgi.rbでやると、
#!/usr/bin/env ruby require 'cgi' cgi=CGI.new cgi.out({"type"=>"text/plain"}) do "hello world" end
となります。これらをベンチマークしてみます。
apache benchで100リクエストを25ずつ送ってみました。
1秒間にさばけるリクエスト数が、
ruby | webrick | rack(CGI) | cgi.rb |
1.8.6 | 34.11 | 71.66 | 116.72 |
1.9.3 | 34.91 | 76.36 | 121.67 |
まあこんなもんかな。cgi.rbが激速ですな。^^;
CGIだとこうなっちゃいます。
webrickはちょっと遅いのがネックかなぁ。
CGIだけじゃなく、FastCGIとかPassengerとかでも
webrickが動けばちょっと嬉しいかな。