Jinja2 と Mako はどちらも明らかにかなり高速です。
これらは (あまり目立たないが、おそらく私がやっていることには十分である) string.Template と比較してどうですか?
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 パフォーマンス テストのコードに基づいており、いくつかのテンプレート エンジンが追加され、精度を高めるために反復が追加されています。最後のリストとジェネレーターの concat は、Python バイトコードにコンパイルすることで達成可能なパフォーマンスの上限を把握するために、手作業でコーディングされた Python です。最適化されたバージョンでは、内側のループで文字列補間が使用されます。
ただし、テンプレート エンジンを切り替える前に、それが重要であることを確認してください。コンパイルするテンプレート エンジンの違いが重要になる前に、かなり重いキャッシュと最適化されたコードを実行する必要があります。ほとんどのアプリケーションにとって、優れた抽象化機能、設計ツールとの互換性、親しみやすさなどははるかに重要です。
jinja2 docsから、必要な場合は string.Template が最速のようです。
間違いなく、テンプレートからできるだけ多くのロジックを削除するようにしてください。しかし、ロジックのないテンプレートは、退屈で愚かなコードですべての処理を行わなければならないことを意味します。これを行うテンプレート エンジンは Python に付属しており、string.Template と呼ばれます。ループや if 条件がなく、Python で入手できる最速のテンプレート エンジンです。
(memcached のように) キャッシュを混在させることができる場合は、最適化ではなく、機能と使いやすさに基づいて選択してください。
構文と機能が好きなので、Mako を使用しています。幸いなことに、これも最速の 1 つです。
一般に、その質問に答えるにはプロファイリングを行う必要があります。これは、テンプレートの使用方法と目的に依存するためです。
string.Template は最も高速ですが、非常に原始的であるため、文字列の置換のみを行い、条件やループがないため、他のテンプレート システムと同じようにテンプレートと呼ぶことはほとんどできず、実際にはほとんど役に立ちません。
Cで実装されているCheetahが最速かもしれません。