概要: CGI Application が遅くなる原因とは何か。
- tokuhirom さんの MENTA というウェブアプリケーションフレームワークをかいてみた というエントリの、
CGI というシーンにおける現状の Perl のウェブアプリケーションフレームワークの問題点とは 都度 perl のインタープリタインスタンスを起動するのでモジュールの読みこみ/コンパイルコストを無視できない bless の速度を無視できない といったあたりであると認識している。
という部分に触発されて書いてるんですけど、CGI Application が遅くなるのは、モジュールや bless の速度もそうですが、
テンプレートを処理する速度 にもよるんじゃないかと思うんですよね。
コンパイルの遅いモジュール(Moose とか)を使ってれば遅くなるのは当然ことなんですが、
テンプレートを処理する速度 も _ 無視できない要因_ なんじゃないかと。
例えばこの Blog は公開直前までテンプレートエンジンにText::MicroMason
を使ってたんですが、
僕の書いたテンプレートだと相当遅くなって、ページを表示するのに 5 ~ 8 秒ぐらいかかってたんですけど、
これを interpolate_fancy を改造したものに変えてから 2 ~ 5 秒とだいぶ改善されたんですよね。
で、この Blog では blosxom のシステム全体で、
- CGI
- CGI::Carp
- DateTime
- DateTime::Format::W3CDTF
- Digest::MD5
- DirHandle
- Encode
- File::Find
- File::Find::Rule
- File::Spec
- File::stat
- FileHandle
- HTML::Entities
- HTTP::Date
- Jcode
- PadWaker
- Path::Class
- Text::ASCIIMathML
- Time::localtime
- YAML::Syck
これだけのモジュール(本当は他にも読み込まれてる)を読み込んでるわけですが、 そういうほども遅くはなっていない。
まあこれは遅いモジュールを使ってないだけなのかも知れませんが、 要するに テンプレートとテンプレートエンジン にも原因があるんじゃないかなーと思うわけです。
まあ他にも重い処理はあると思いますけど。
ちと追記:2008-11-13T12:24:27
tokuhirom さんのコメントを読んで、記事を読み直したらなんかおかしなことを言ってるように思えてきたんでちょっと訂正するんですが、
テンプレートエンジンが遅いから CGI Application が遅くなる、と言うつもりじゃなくて、
遅いテンプレートエンジンを使ってる と CGI Application が遅くなる、ということを言いたかったんですよね。
まあこの辺り僕の書き方が妙だったせいなんですが。
#FIXME