oinume journal

Scratchpad of what I learned

Text::MicroTemplateとHTML::Template::Proの比較

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>

hoge

 

 

 

 

 

出力されるHTML

 

 

 

 

#ここに改行

hoge

#ここにも改行

 

 

 

 

出力するのがHTMLであればそんなに問題はないのですが、メールの文面をテンプレートエンジンで動的に生成したい場合、改行が実直に反映されてしまうので、いつもどうしようか悩んでしまいます。この改行のためにHTMLの生成とメールの生成で別々のテンプレートエンジン使うのも微妙ですし。

 

もしかするとHTML::Template::Proの filter 機能でなんとかできるのかもしれませんが、まだそこまでは考えられてないです。というわけで相変わらずテンプレートエンジンどうしようか悩み中...

 

[rakuten]book:11294491[/rakuten]