django 1.4 のデフォルト テンプレート システムを使用して適度に複雑な辞書 (4 レベルの深さ、~2K データ ポイント) をレンダリングすると、テンプレート レンダリング ステップに 2800 ミリ秒以上かかります。代わりに、python から直接 html-gen を実行すると、約 80 ミリ秒かかります。別のテンプレート ライブラリ ( jinja2 ) を使用しても、同じデータが 300 ミリ秒未満でレンダリングされます (実際、ほとんど同じテンプレート構文 - jinja2 はほとんどドロップインの代替品であるため)。
興味深いことに、 django のテンプレート システムでこのパフォーマンスの問題を引き起こすために、実際にテンプレートでディクショナリをレンダリングする必要さえありません。必要なのは、使用可能な変数としてテンプレートに渡すことだけです。私の友人は、これはシステムが「...防御的なコピーを行っているか、(もっとばかげた) 実行中のコンストラクターのために時間がかかる理解を行っている」ことを意味している可能性があると示唆しました。
django のデフォルトのテンプレート システムが辞書のレンダリングに時間がかかる理由を知っている人はいますか?
* リクエストされた詳細を以下に追加する作業を行います *
デバッグ モードで実行しており、ミドルウェア クラスの 1 つとして DebugToolbarMiddleware を設定しています。私のsettings.pyファイルには以下が含まれます:
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'django.core.context_processors.request',
)
と....
# rendering like this
return render(
request,
template_name='ltm/search_results.html',
context_instance=RequestContext(request, {
'menus': menus,
'results': result_dict
})
)