Perl日記

PerlとかRubyとかPHPとかPythonとか

Text::Hamlの実行コードをキャッシュして高速化した話

Text::Haml - search.cpan.org
PerlHamlのText::Hamlだが毎回$haml->render_fileで

 構文解析→出力用package作成→出力用サブルーチン実行

という手順を踏んでいるので、Hamlファイルが大きくなればなるほど
実行速度がどんどん遅くなっていやだなーと思ったので、
最初の2つをキャッシュ化するようにしてみた。
https://github.com/rightgo09/text-haml
Text::Xslateを参考に3つのオプションが使えるようにした。

my $haml = Text::Haml->new(
    path => 'views/',   # default "."
    cache => 2,         # default 1
    cache_dir => '/tmp' # default $ENV{HOME}/.text_haml_cache
);
$haml->render_file('index.haml', (
   param1 => value1,
));

だいたい500KBのシンプルなHamlテンプレートを使ってベンチマーク試したら620432%という数字が出てきてびっくりしたw
6千倍かよ。
500KBは大きいにしても、10KBのテンプレートでも100倍くらいにはなったので、キャッシュはあったほうがいいのではないかと思う。


そして初めてのpull request。