tokuhirom's Blog

Text::MicroTemplate を高速化するために

Text::MicroTemplate の高速化の余地のメモ。

html escape

NYTProf をとると、pp_subst で時間をくっていることは明白です。pp_subst っていうのはつまり s/// のことで、s/// をつかっているのは html escape の部分なので、この html escape 部分を高速化するのが効果がありそうです。Text::Xslate::Util::html_escape() をよぶようにしたところ、パフォーマンスが倍程度向上した。

とはいえ、Text::Xslate に依存するのは負け感がすごい。id:gfx の話によれば、今後 html escape 部分を単体モジュールとしてだしたいということなので、それが出されたあかつきには、T::MT でそれを optional な dependency として設定して利用するようにすればより高速に利用できるということになるだろう。

x-poor-env.pl 対策

Xslate に付属しているベンチマークスクリプトであるところの x-poor-env.pl では、オンメモリキャッシュが利用できないという前提なのだが、T::MT::File ではオンメモリキャッシュしかサポートしていない。よって、ファイルベースのキャッシュをつくれるようにすれば、より差がつく。

現状では NanoA/Amon/MENTA あたりではそれぞれ、フレームワーク側でファイルベースキャッシュの機能をつくっていて、このあたりを T::MT::File にもたせられれば楽になるという思惑もある。

string buffer

Perl5 の string(PV) のバッファアロケーションは、たりなくなったらチマチマとのばしていくという方針なのだが、T::MT は、テンプレートエンジンであるから、これが非常に頻繁に発生してしまい、オーバーヘッドになっている可能性がある。よって、あらかじめ領域を確保しておくなどの方針により、より高速化が可能なのではないか。