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が遅くなる、ということを言いたかったんですよね。
まあこの辺り僕の書き方が妙だったせいなんですが。