Xslate テンプレートの圧縮
xslate を Webアプリで御利用の皆様におかれましては、こちらで紹介されているようなテンプレートの preload を行っていると思いますが、せっかくなので、同じフェーズで HTML の圧縮を軽く行ってみました。
sub load_all_template {
my $tx = shift;
for my $path ( @{$tx->{path}} ) {
dir($path)->recurse(callback => sub {
my $file = shift;
if ( $file =~ m!^$path/(.*$tx->{suffix})$! ) {
_backup_file($file);
_filter_file($file);
}
});
dir($path)->recurse(callback => sub {
my $file = shift;
if ( $file =~ m!^$path/(.*$tx->{suffix})$! ) {
$tx->load_file($1);
_repair_file($file);
}
});
}
}
_filter_file($file);
というのがその実体です。
(実際はそこからさらに _filter_template
が呼ばれる)
sub _filter_template {
my $template_ref = shift;
$$template_ref =~ s/\n[\s\t\r\n]+</\n</g;
$$template_ref =~ s/>[\s\t\r\n]+</></g;
}
空白やタブ、改行を取っ払っているだけで、テンプレートの記述を壊さないようにゆるく処理しています。
スペースインデントだったので、15% くらい容量減りました。gzip するにせよ、もとが小さいに越したことはないし、プリロード時点で行うのでリクエストの処理速度には悪影響がありません。細かく言えば、吐き出す容量が減る分、処理は少し良くなるはずです。
今回、ばーっと書いてみたのですが、xslate に load_from_string 的なの欲しいと思った。