もっと実用的なベンチマーク

今度は、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

Ruby/SALT版(salt.cgi salt.rbx)

#!/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 PHPCGIとして動かす
php.php 96.87 97.98 97.50 97.45 mod_php

驚いたのが、erubyはCGIとして動かしたほうが速いということ。たしか、mod_erubyは一端tmpディレクトリにコードを書き出してるとどっかで見た気がするのですが、そのせいでしょうか?

それから、作りによってはPHPの速度を超えることも可能だということですね。

さて、掲示板みたいなものでも作ってみてから一般公開しようかな。