PerlでWebアプリを作る時のテンプレートエンジンをどれにしようか相変わらず模索中なのですが、以下の2つのエントリーで動作速度とメモリについて調べた結果、どうやらText::MicroTemplateとHTML::Template::Proのどちらかを選択するのが良いだろうと思っています。
Text::MicroTemplateの良い点
- Perlのコードが書けるので自由度が高い
- そこそこ速い
- 省メモリ
- デフォルトでHTMLエスケープしてくれるのでセキュリティ的にもグッド
- コードがシンプルなので拡張しやすい
- loopやifで改行の制御が出来る(<? 〜 ?>と ? )
HTML::Template::Proの良い点
- 文法がシンプル
- 爆速
- そこそこ省メモリ
- register_functionでテンプレート内から呼び出せる関数が登録できるので、拡張性はそれなりにある
Text::MicroTemplateのイマイチな点
- 自由度が高い分、色々できてしまう(Viewにロジックをガリガリ書いたりとか)
- Includeがデフォルトでは出来ない(Text::MicroTemplate::Extended使えば似たようなことはできる)
HTML::Template::Proのイマイチな点
- <TMPL_IF>、<TMPL_LOOP>などの制御を書く時の改行のコントロールが難しい
- デフォルトではHTMLエスケープがかからないので、自前で自動エスケープのロジックを書くかテンプレート側で毎度エスケープしなくてはいけない
「<TMPL_IF>、<TMPL_LOOP>で改行のコントロールが難しい」というのは、例えば以下のテンプレートファイルがあって、それを実際に出力した時のHTMLに改行が入ってしまう、ということです。
テンプレートファイル
<TMPL_IF NAME=hoge>
出力されるHTML
#ここに改行
#ここにも改行
出力するのがHTMLであればそんなに問題はないのですが、メールの文面をテンプレートエンジンで動的に生成したい場合、改行が実直に反映されてしまうので、いつもどうしようか悩んでしまいます。この改行のためにHTMLの生成とメールの生成で別々のテンプレートエンジン使うのも微妙ですし。
もしかするとHTML::Template::Proの filter 機能でなんとかできるのかもしれませんが、まだそこまでは考えられてないです。というわけで相変わらずテンプレートエンジンどうしようか悩み中...
[rakuten]book:11294491[/rakuten]