もっと実用的なベンチマーク
今度は、Apache Benchで計測。100Base-TXでつながれたクライアントからアクセスします。
まず、改めてパース対象のことを述べますと、これはYahoo! JAPANのトップページをFirefoxのWebページ保存機能で完全な姿で保存したものです。なので、相対パスはすべて絶対パスに書き換えられているぶん、容量は大きくなっています(約64KB)。このHTMLのファイル名は、yahoo.htmlとしています。
それではまず、CGIおよびmod_rubyでのベンチマークをとるプログラムです。
ERB版(erb.cgi erb.rbx)
#!/usr/bin/env ruby require "erb" require "cgi" t = "" open("yahoo.html", "r") do |fh| t = fh.read end e = ERB.new(t) CGI.new.out do e.result end
#!/usr/bin/env ruby require "salt" require "cgi" t = "" open("yahoo.html", "r") do |fh| t = fh.read end s = SALT.new(t) CGI.new.out do s.result end
FastCGI用のソースは以下の通りです。パースをはしょっています。
ERB版(erb.fcg)
#!/usr/bin/env ruby require "erb" require "fcgi" t = "" open("yahoo.html", "r") do |fh| t = fh.read end e = ERB.new(t) FCGI.each_cgi do |cgi| cgi.out do e.result end end
Ruby/SALT版(salt.fcg)
#!/usr/bin/env ruby require "salt" require "fcgi" t = "" open("yahoo.html", "r") do |fh| t = fh.read end s = SALT.new(t) FCGI.each_cgi do |cgi| ns = s.new_salt cgi.out do ns.result end end
そのほかに、yahoo.htmlをほぼそのままリネームして比較対象としてerubyとphpでも動かしてみます。
テストに使用したApache Benchのオプションは以下の通りです。
$ ab -n 300 -c 10 -k http://あどれす
結果(見難いですが)
ファイル名 | 1回目 | 2回目 | 3回目 | 平均 | 備考 |
---|---|---|---|---|---|
yahoo.html | 212.62 | 218.34 | 218.98 | 216.65 | 素のHTML |
erb.cgi | 4.50 | 4.51 | 4.54 | 4.52 | |
erb.fcg | 25.83 | 25.54 | 25.84 | 25.74 | |
erb.rbx | 6.72 | 6.87 | 6.78 | 6.79 | |
salt.cgi | 10.88 | 10.82 | 10.87 | 10.86 | |
salt.fcg | 108.57 | 102.53 | 102.53 | 104.54 | |
salt.rbx | 39.67 | 39.83 | 42.07 | 40.52 | |
eruby.cgi | 48.24 | 42.02 | 56.12 | 48.79 | erubyをCGIとして動かす |
eruby.rhtml | 22.41 | 23.25 | 23.52 | 23.06 | mod_eruby |
php.cgi | 3.78 | 3.79 | 3.80 | 3.79 | PHPをCGIとして動かす |
php.php | 96.87 | 97.98 | 97.50 | 97.45 | mod_php |
驚いたのが、erubyはCGIとして動かしたほうが速いということ。たしか、mod_erubyは一端tmpディレクトリにコードを書き出してるとどっかで見た気がするのですが、そのせいでしょうか?
それから、作りによってはPHPの速度を超えることも可能だということですね。
さて、掲示板みたいなものでも作ってみてから一般公開しようかな。