現時点では、チーターを選択しました。 その理由は次のとおりです。
性能
優れたテンプレートエンジンを探して、「 マルチエンジンテンプレートシステム 」という記事を見つけました。この記事では、テンプレートのレンダリング速度をさまざまなエンジンと比較しました。
テストは、以下を含むかなり単純なテンプレートで実行されました。
- 文字列変数(「hello world」);
- 100アイテムのリストをクロールします。
- 乱数出力;
- 属性出力によるDjangoモデルのバイパス。
明確なテストリーダーはチーターとマコです。 このテストおよび他のテストによると、CheetahはDjangoテンプレートエンジンより2倍以上高速です。 MakoはDjangoより1.7..2倍高速です。
チーターの場合、より複雑なテンプレートを使用してテストを実施しました。
基本テンプレートには、タイトル、スクリプト、コンテンツの3つのブロックが含まれていました。 ページテンプレートがそのテンプレートから継承され、これらのブロックが再定義されました。 タイトルでは、文字列がスクリプトに配置されました-100行のリストをクロールした結果、コンテンツ-100個のオブジェクトをクロールした結果、5つのプロパティの出力。 テンプレートを使用するページは100回呼び出されました。 最初の呼び出しの時間は考慮されませんでした。
その結果、平均ページ生成時間は次のようになりました。
- Django-437ミリ秒;
- チーター-211ミリ秒。
複雑なテンプレート(継承とオブジェクトのリスト)を使用してMakoをテストした結果を見るのは面白いでしょう。
構文
構文のせいで、私は間違いなくMakoとCheetahを選択しました。 ほとんどのテンプレートエンジンのタグのような構文は本当に嫌いです。 Cheetahは特定の文字を使用して、ディレクティブと変数の始まりを示します。 デフォルトでは、ディレクティブは#で始まり、変数は$で始まります。 この動作は、コンパイラディレクティブを使用してオーバーライドできます。
#コンパイラー設定 directiveStartToken = ^ commentStartToken =# #endコンパイラ設定 #テーブル行を印刷 ^ def makerow(行、クラス) <tr class =” $ {class} _ggg”> ^ $行の$セルの場合: <td> $ cell </ td> ^丸lurみ ^終了 </ tr> ^ end def
汎用性
チーターとPythonには長い歴史があります(2001年以降)。 現時点では、Django、TurboGears、Pylonsなど、すべての主要なPython Webフレームワークでサポートされています...
フレームワークとは別に使用することもできます。
締め方
Cheetahテンプレートの使用に簡単に切り替えることができるdjango-cheetahtemplateプロジェクトがあります。 django_cheetahtemplatesを接続すると、 render_che_ah_responseメソッドが得られます。これはrender_to_responseの代わりに使用できます。 Django Templateクラスと同様に動作するCheetahTemplateクラスを接続することもできます。
問題はありますか?
Djangoは、複雑な正規表現を持つシャロンをノードに解析します。 テンプレートの適用は、転送されたコンテキストの各ノードのrender()メソッドの実行に限定されます。 Cheetahは各テンプレートをpythonクラスにコンパイルします。 これには時間がかかりますが、このテンプレートを使用するとパフォーマンスが向上するようです。 このようなアプローチは安全ではないと考えられています。テンプレートは、知らないはずのデータを参照する場合があります。 テンプレートを誤用すると、ドキュメントとそのプレゼンテーションの論理的な分離に違反する可能性があります。
100%の汎用性とデータとプレゼンテーションの厳密な分離が必要な場合は、XML-XSLTバンドルを使用することをお勧めします。 確かに、この場合、テンプレートの作成には特別な訓練を受けた人が必要になりますが、これは必ずしも便利ではありません。 そして、そのようなソリューションのパフォーマンスははるかに低くなります。
継承は、コンパイルされたテンプレートからのみ可能です。 ほとんどの場合、基本的なテンプレートは最初に記述され、コンパイルは1つのコマンド(
cheetah compile template_name
)で行われ、数秒かかるため、これは問題ではありません。 さらに、近い将来、この操作を自動化するか、既成のソリューションを見つけようとします。
何を読む
Jinja2に関する重要な追加
ジンジャという言葉はコメントに11回登場しますが、ほとんどの場合、良い文脈で登場します。 もちろん、このような推奨事項を無視して、このテンプレートエンジンを配置することはできませんでした。 このコメントの言葉を読んでください。