Perlの軽量ウェブアプリケーションフレームワーク最新事情

前代未聞のPerl軽量ウェブアプリケーションフレームワーク祭りの中、いかがお過ごしでしょうか?

紆余曲折があってこんなことを言ってたわりに何もしてないでぼーっとしている間に、腕に覚えのある兵達が我も我もと手を動かしてくれたので、申し訳なさ半分で懲りずにベンチマークを取ってみました。

みんな基本的に軽量なフレームワークをうたっていて、開発効率よりも軽さや配布のしやすさを売りとしているので特に問題ないと思います。

比べたのは上の3つと

です。

一応ゆるいルールを決めました。

  • 全てCGI(mod_perlなどは使わない)
  • 最適化が出来る場合は最適化する(MENTAのbin/menta.pl
  • Content-Type: text/html;char=utf-8のヘッダ出力
  • HelloWorldの文字列の出力
  • ab -n 1000 -c 100 によるアクセス
  • codereposのリビジョン23406までのものを使ってる

結果は

- Requests per second:
素のCGI 99.72 [#/sec]
MENTA 80.15 [#/sec]
Yacafi 66.15 [#/sec]
NanoA 51.20 [#/sec]
CGI.pm 23.29 [#/sec]
CGI::Application 18.38 [#/sec]

ベンチマークに使ったソースと結果はCodeReposに置いてあります。

結果として特筆すべきは、コンパイル作業を行う手間がかかるけど、MENTAの速度が驚異的ということです。これは他を圧倒して、かつ素のcgiに迫る勢いです。さらにMojo::Templateをベースにしたテンプレートエンジンや、プラグイン機能、開発用スタンドアロンサーバーなども含んでおり、開発時にはそれなりの開発効率を見込めるフレームワークになっています。

YacafiYacafi.pmとindex.cgiの編集だけでよく、もっともポータビリティが高い印象を受けました。また更にpackして一つのファイルにすることもできるのですが、これによるパフォーマンス改善はさほど見られなかったです。もちろん更にポータビリティは上がるので、そのような用途にはいいですね。

NanoAは3つの中では一番パフォーマンス的には劣りましたが(とはいえ、十分に速い)、CGI::Applicationのディスパッチテーブル無し版のような書き方が出来るのは作者のid:kazuhookuさんのCGI::Applicationへの愛が感じられます。また、最新版ではMojo::Templateを使ったPHPライクな書き方もサポートしておりビューを含んだベンチではどうなるかというのも興味があります。

どのフレームワークにも言えることは

です。

ちょっとしたお問い合わせフォームやアンケート程度だったらCatalystなんて大きすぎるので、このような軽量・高速フレームワークの検討をするのもいいと思います。