Web frameworks benchmarkを動くようにしてみた

たまには本と関係ない話題も。

Oleg Andreev(oleganza)さんの作った、Web frameworks benchmarkというアプリがあります。これは、Ruby製のWebアプリケーションフレームの、ベーシックな部分のベンチマークをまとめてとるためのツールです。

http://github.com/oleganza/web-frameworks-benchmark/tree/master

……なんですが、ちょっと古いせいか、現状のgemsでは動きませんでした。というわけで、修正してみたのが以下です。

http://github.com/takahashim/web-frameworks-benchmark/tree/master

実行の仕方は以下の通り。

$ ruby benchmark.rb start # 各サーバの起動とベンチマークの実行
$ ruby benchmark.rb run   # 起動した後のベンチマークのみの実行
$ ruby benchmark.rb stop  # 各サーバを停止

結果は以下のようになりました。

maki$ ruby benchmark.rb run
Testing frameworks with 1000 requests and 10 connections: 
Benchmarking Sinatra on port 3900...
>> ab -c 10 -n 1000 http://127.0.0.1:3900/ 2>/dev/null
Benchmarking MerbVeryFlat on port 4002...
>> ab -c 10 -n 1000 http://127.0.0.1:4002/ 2>/dev/null
Benchmarking Camping on port 3301...
>> ab -c 10 -n 1000 http://127.0.0.1:3301/ 2>/dev/null
Benchmarking Merb on port 4000...
>> ab -c 10 -n 1000 http://127.0.0.1:4000/ 2>/dev/null
Benchmarking Rails on port 3000...
>> ab -c 10 -n 1000 http://127.0.0.1:3000/ 2>/dev/null
Benchmarking Ramaze on port 7000...
>> ab -c 10 -n 1000 http://127.0.0.1:7000/ 2>/dev/null
  Sinatra => 558.96 rps
  MerbVeryFlat => 555.67 rps
  Merb => 542.76 rps
  Rails => 266.34 rps
  Ramaze => 128.91 rps
  Camping => 0.0 rps

あー、実はCampingはまだ動きません……でもMerbやSinatraよりは遅いそうなので、まあいいかなと。

Sinatraも早いけど、Merbもかなり頑張ってますねえ。Railsはもっと工夫すれば速くなるのかも? でも、Merbとの差はかなり大きいのでそうそうは縮まないかも。