NanoB というウェブアプリケションフレームワーク書いた

MENTA (http://d.hatena.ne.jp/tokuhirom/20081112/1226460761) は事前コンパイル型だけど、キャッシュ方式でどこまでパフォーマンスが出るか。と同時に、CGI で最速 WAF を作ろうと思うと、コントローラ毎に index.cgi を生成するのが一番速いだろうというのは、合意が得られるところだろう。というわけで、apache のリクエストに応じて、cgi を動的に生成/更新するウェブアプリケーションフレームワークを作ってみました。あくまでも評価目的 (=ネタ) なので、名前も NanoB というやる気のないもの。

結論: やや古い MENTA に対して 13% 増の速度 (156.67 reqs/s vs. 138.27 reqs/s)

取った手法としては、以下のとおり。

  • CGI 生成 CGI が、cache ディレクトリ以下にコントローラ CGI を動的に生成
    • % chown www:www cache
  • 初回は cache されたコントローラ CGI がないので、 ErrorDocument ディレクティブで CGI 生成 CGI を呼び出し
  • 生成されたコントローラは、自分のソースコードの更新時刻を毎回確認

オーバーヘッドは最後の stat(2) 呼び出し1回なので、ほぼ無視してもいい範囲だと思います。

ソースコードhttp://coderepos.org/share/browser/lang/perl/NanoB/ に置いてあります。「cache」という名のディレクトリを掘って、chown www:www cache してから、cache/start.cgi を実行すれば (この時点で cgi は存在しないことに注意) 、動き出します。