2010-11-19 11 views
13

私は、ajaxリクエストによってその場で生成されたhtmlがたくさんあるDjango Webアプリケーションを構築しています。今、私はDjangoのテンプレート言語を使用してhtmlを構築し、この新しいHTMLをJSONオブジェクトの文字列として渡し、jQueryでページに挿入します。JavascriptまたはDjangoでのテンプレート?

これはかなりうまくいきますが、現代のブラウザではJavascriptが非常に速く、非常に多くのJavaScriptテンプレートライブラリが作成されているため、すべてのクライアントをプッシュする必要があるのだろうかと思います。

私の平均的な「ページ」は、その間にすべてのリクエストがあり、約300個のテンプレート(それぞれ約15かそれ以上の行が5個程度の置換)でコンパイルされなければならないブラウザでテンプレート化を実行するとパフォーマンスが大幅に向上しますか?

さらに、誰も「高速」なJavascriptテンプレートライブラリをお勧めしますか?私はunderscore.js、mustache.js、jQueryテンプレートについて良いことを聞いてきました。

+0

クロージャテンプレートはGoogleコンパイラでコンパイルできるので、高速です – Evgeny

+0

私はこの問題も抱えていましたが、関連するデータ量(多くのエントリがある画像ギャラリー)のためHTMLを返信するのは不合理です。私はクライアントとサーバー側の口ひげで解決しました - 私は口ひげが好きです。 –

答えて

4

Djangoテンプレートを使用する(大量の)メリットは、生成するページに関係なく同じ機能を保持するテンプレート言語を1つ使用すればよいことです。パフォーマンス上の問題がある場合は、caching template fragmentsを調べることを検討する必要があります。

+0

s/Django/Jinja2/gはもっと大量になります;) – Evgeny

+0

もちろん、引用を慎重にしているなら、あなたのDjangoテンプレートはJSONを生成できません...埋め込みHTMLで... –

0

なぜHTMLをJSONとして渡しますか?単にHTMLを送り返し、jQueryの$.html()関数を使用して<div>などに入れてください。

Javascriptでのテンプレート作成には、Pureがあります。 jQueryを使用している場合は、it already has a template engineです。

+0

Myレスポンスオブジェクトには他の情報が含まれています(DOMとUIDのどこに要素を追加するかについて)、$ .html関数を使用しますが、新しいHTMLを含むJSON辞書のキーを渡します。 –

0

2つの目的のテンプレートを作ることができます。つまり、jsで置換するためのプレースホルダにレンダリングすることができ、同時にサーバー出力用にレンダリングすることもできます。そのような二重の目的、すなわちjsによって置き換えられるフラグメントに必要なテンプレートはほんのわずかです。

私はIgnacioに同意しますが、それぞれのテンプレートのコピーを1つだけ保持して、javascript用に別のものを書く必要はありませんが、私は上記のとおりです。

理想的には、テンプレートがサーバーの出力のための堅牢なjavascript関数コードとプレーンストリングにコンパイルされることが必要な場合があります。

Closure templates Soyと呼ばれていますが、問題をうまく解決していますが、Pythonではうまく動作しませんが、JavaとJavascriptで動作します。うまくいけば、ある日、そこにはPythonのサポートがあります。

でも、それが起きたとしても、.get_absolute_url()やフィルタなどは、Pythonとjavascriptの両方で自動的に動作するように厳しくなるため、テンプレート言語はおそらく制限されています。

3

私はハイブリッドクライアントとサーバーのテンプレートアーキテクチャが悪いとは思わない。限り、環境のいずれかでのみテンプレートをコード化します。

ページサーバー側を生成するたびに、処理時間とネットワーク帯域幅が消費されます。これは、ホストされたサーバーを使用する場合に支払うものです。
一般的にアイドル状態のコンピュータでは、ユーザーのブラウザが応答待ちの状態で待機しています。

クライアント(HTML + JS)でテンプレートを送信すると、そのテンプレートをセッション用に、またはユーザーが削除しない場合でも数日でキャッシュすることができます。
これにより、同じコンテンツを何度も配信するネットワークトラフィックが減少します。データは、一般に同等のレンダリングされたHTMLよりも小さいためです。

今日のJavascriptエンジンは、実行速度が非常に速いだけでなく、実行するコンピュータも非常に高速です。レンダリング作業をクライアントに送信するたびに、サーバーの処理時間が短縮され、データがより速く配信されます。

私たちはすべてクライアント上で実行しているので、我々は極端なクライアントレンダリングのためにPUREを作成しました。私たちのアプリは、この地方分権の結果、非常に速く見えます。

+0

アドバイスをいただき、ありがとうございます。私はPUREをチェックします。 –

関連する問題