Jinja2とMakoはどちらもかなり高速であるようです。
これらは(あまり機能的ではありませんが、おそらく私がやっていることには十分です)string.Templateとどのように比較しますか?
以下は、10x1000 HTMLテーブルをレンダリングするための一般的なテンプレートエンジンの結果です。
Python 2.6.2 on a 3GHz Intel Core 2
Kid template 696.89 ms
Kid template + cElementTree 649.88 ms
Genshi template + tag builder 431.01 ms
Genshi tag builder 389.39 ms
Django template 352.68 ms
Genshi template 266.35 ms
ElementTree 180.06 ms
cElementTree 107.85 ms
StringIO 41.48 ms
Jinja 2 36.38 ms
Cheetah template 34.66 ms
Mako Template 29.06 ms
Spitfire template 21.80 ms
Tenjin 18.39 ms
Spitfire template -O1 11.86 ms
cStringIO 5.80 ms
Spitfire template -O3 4.91 ms
Spitfire template -O2 4.82 ms
generator concat 4.06 ms
list concat 3.99 ms
generator concat optimized 2.84 ms
list concat optimized 2.62 ms
ベンチマークは Spitfireパフォーマンステストからのコード に基づいており、いくつかのテンプレートエンジンと反復を追加して精度を高めています。最後のリストとジェネレータの連結はPythonバイトコードにコンパイルすることで達成可能なパフォーマンスの上限を感じ取るために、Pythonで手作業でコーディングされています。最適化されたバージョンは、内部ループで文字列補間を使用します。
しかし、テンプレートエンジンを切り替えるために不足する前に、それが重要であることを確認してください。コンパイルテンプレートエンジン間の違いが問題になる前に、かなり重いキャッシングと本当に最適化されたコードを実行する必要があります。ほとんどのアプリケーションでは、優れた抽象化機能、設計ツールとの互換性、親しみやすさなどがはるかに重要です。
jinja2 docs から、string.Templateが必要な場合は最速のようです。
間違いなく、できるだけ多くのロジックをテンプレートから削除する必要があります。しかし、ロジックのないテンプレートは、退屈で愚かなコードですべての処理を行わなければならないことを意味します。これを実行するテンプレートエンジンは、Pythonと呼ばれ、string.Templateと呼ばれます。ループがなく、if条件が付属しており、Pythonで入手できる最速のテンプレートエンジンです。
(memcachedのように)混合でキャッシングをスローできる場合は、最適化ではなく機能と使いやすさに基づいて選択します。
構文と機能が好きなので、Makoを使用します。幸いにも、それは最速の1つでもあります。
テンプレートをどのように使用するか、何のために使用するかによりますが、一般的には、その質問に答えるためにプロファイリングを行う必要があります。
string.Templateは最も高速ですが、プリミティブなので、文字列の置換のみを行い、条件やループがないため、実際にはほとんど役に立たないため、他のテンプレートシステムと同じようにテンプレートと呼ぶことはほとんどできません。