53

Jinja2 と Mako はどちらも明らかにかなり高速です。

これらは (あまり目立たないが、おそらく私がやっていることには十分である) string.Template と比較してどうですか?

4

5 に答える 5

103

以下は、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 です。最適化されたバージョンでは、内側のループで文字列補間が使用されます。

ただし、テンプレート エンジンを切り替える前に、それが重要であることを確認してください。コンパイルするテンプレート エンジンの違いが重要になる前に、かなり重いキャッシュと最適化されたコードを実行する必要があります。ほとんどのアプリケーションにとって、優れた抽象化機能、設計ツールとの互換性、親しみやすさなどははるかに重要です。

于 2009-08-25T05:28:48.647 に答える
9

jinja2 docsから、必要な場合は string.Template が最速のようです。

間違いなく、テンプレートからできるだけ多くのロジックを削除するようにしてください。しかし、ロジックのないテンプレートは、退屈で愚かなコードですべての処理を行わなければならないことを意味します。これを行うテンプレート エンジンは Python に付属しており、string.Template と呼ばれます。ループや if 条件がなく、Python で入手できる最速のテンプレート エンジンです。

于 2009-08-24T19:30:46.800 に答える
3

(memcached のように) キャッシュを混在させることができる場合は、最適化ではなく、機能と使いやすさに基づいて選択してください。

構文と機能が好きなので、Mako を使用しています。幸いなことに、これも最速の 1 つです。

于 2009-11-09T00:16:00.687 に答える
1

一般に、その質問に答えるにはプロファイリングを行う必要があります。これは、テンプレートの使用方法と目的に依存するためです。

string.Template は最も高速ですが、非常に原始的であるため、文字列の置換のみを行い、条件やループがないため、他のテンプレート システムと同じようにテンプレートと呼ぶことはほとんどできず、実際にはほとんど役に立ちません。

于 2009-08-24T20:19:22.973 に答える
-4

Cで実装されているCheetahが最速かもしれません。

于 2009-08-25T00:29:17.057 に答える