仕上げ中の原稿でつかう主なWebアプリケーション実装方法ごとのベンチマーク結果を纏めていた。大体予想通りなんだけど一部納得行かない部分が。
評価方法と対象
評価対象は次の8種類の環境で、現在時刻の文字列を- CGI (C言語)
- CGI (Perl)
- Java Servlet (JRE 1.3.1, Tomcat 4.1.24生)
- Java Servlet + mod_jk + Apache
- PHP (4.3.2)
- mod_perl (Apache::Registry)
- Apache module
名称 | 処理件数[/sec] | 転送レート[Kbyte/sec] |
---|---|---|
CGI (Perl) | 11.73 | 24.48 |
CGI (C) | 48.99 | 102.86 |
Java Servlet (Tomcat + mod_jk + Apache) | 84.64 | 178.87 |
Java Servlet (Tomcat単体) | 105.12 | 219.38 |
PHP | 103.97 | 220.73 |
mod_perl (Apache::Registry) | 110.67 | 233.85 |
Apache module | 313.48 | 654.89 |
Apache module APIのお話の原稿なので
如何にApache moduleが優位かを強調する必要があったのは内緒です。とは言えズルすること無く普通に当たり前の結果が出てきました。
構造的に似たグループであるJava ServletとPHPとmod_perlが横並びなのは予想通りではありますが、JavaのDateクラスのtoStringメソッドがナニゲにコストの高い処理であったのが興味深かったですね。単純なループとテキスト整形だけだとこの値より1.5倍ほど良い結果が得られます。Hello Worldでは得られない、ある意味現実的なベンチマークができたのでは無いかとか思ってみたり。ソースコードはそのうち適当な場所にのっけます。
Mac OS XのPHP事情
今まで全くPHPを使ったことが無かったので真面目に調べてみていたのですが僕の開発 & 日常作業環境であるMac OS XでのPHP事情というか、Mac OS Xでまともに使えるアクセラレータが無いのが不満でした。今回は使用しませんでしたがPEARなどのライブラリを読み込むと劇的に遅くなるので、真面目に使う場合はコンパイル結果のキャッシュは必須だと思うんですよね。一応Mac OS X向けにZend Optimizerの古いバージョンは提供されているのですが、php.info的に有効になっている状態でも結果に表れてこない。その他のオープンソース物はそもそもビルドできないという始末。まぁ私はベンチマーク取る以外ではPHPを使うことは無いので別にイイのですが。あ、いずれ会社で使うのかな。。。あとPHPのCGI版とやらの結果は別に必要だと思えなかったので無視。とりあえずせっかくビルドしたのを速攻でrmするのもナンなのでしばらく転がしておこうかな。