2010-12-03 6 views
8

私には、ベストプラクティス/パフォーマンスに関する質問があります。私はASP.NET MVC 2プロジェクトを作成していますが、ロード時またはユーザー操作時に動的にアクセスされるページのいくつかの部分があります。どちらが良いですか:JSのクライアントまたはサーバー上のHTMLレンダリングですか?

私の質問は、セクションをHTMLでサーバー上にレンダリングし、HTMLのセクションを置き換える方が良いか、JSONオブジェクトとして情報を取得してJSを使用して作成して挿入する方が良いでしょうか? HTML?

問題の対象は本質的に非常に単純です。例は、すべての文字列であるIDフィールド、aフィールド、aフィールド、subjectフィールド、bodyフィールドを持つ 'message'オブジェクトです。

いずれのアプローチにも重大なメリットとデメリットがありますか?あるいは、これはあなたのアプリケーションを構築する方法に優先されますか?

答えて

1

どちらも良いとは思わない。それはあなたの要件に依存するつもりです。問題は、境界線のない答えられないことです。クライアント上のデータをさらに計算や操作に使用しているのですか、または何かを表示しているだけですか?

どちらの場合でも、データ構造をHTMLに変換するよりも直接的にJSONとしてデータ構造を表現する方が簡単で、JSONよりもHTMLを直接表示する方が簡単です。

+0

これは表示用です。情報は何に関係なくHTMLでラップされます。質問は、単にサーバー上でHTMLを作成し、それを送信してドロップする方が良いか、JSONとして情報を送信して、その場でHTML要素を作成するほうが良いでしょうか? – Dave

+2

あなたは変更/編集されない静的コンテンツだけを吐き出したいと思うようです。その場合、JSONの送信とJSでのDOMの構築は過度のものかもしれません。あなたは、サーバー自体からHTMLとしてデータを送信することができます。これが将来、あなたのもとに戻って来る唯一の理由は、あなたや上司が、このコンテンツが突然編集可能であると判断した場合、またはユーザーがそれに悩まされる可能性がある場合だけです。 HTMLタグスープでコンテンツをロックしているので、JSを使用してコンテンツを簡単に操作できず、HTMLではなくサーバーからのJSON応答を保証します。 – Rajat

0

ジョナサンはすでに言っているように、私はあなたの質問に対する単純なイエス/ノーの回答はないと思います。

既に言及されていない唯一の要因は、クライアントサイドの実行がブラウザからの実行がブラウザによって異なりますが、サーバー側の実行が予測可能であることです。これは実際にはイントラネットサイト上の要素ではないかもしれませんが、視聴者が多様であれば重要になります。現代のJavascriptライブラリ(通常はそうではない)はブラウザの癖から私たちを守りますが、古いブラウザでも特定のパフォーマンス上の問題が発生する可能性があります。

あなたが最も快適に実装できると感じるソリューションを選ぶことは、非常にうまくいくかもしれません。

1

多くのフレームワークは比較的ゆっくりしたレンダリングライブラリ(Model-View-ControllerアーキテクチャのView部分)を持っています。レンダリングライブラリは変数を置換するためにViewドメイン固有の言語を解析/実行する必要があります。

アプリのスケールに応じて、クライアントのブラウザでレンダーを実行する方がはるかに高速になることがあります。しかし、ビューの計算をクライアントに移すことは、一貫性のあるやり方でやりにくいことがあります。

GoogleのClosure compilerにはテンプレートライブラリが含まれています。もう一つのオプションは液体です。それはJavascript,.NetおよびRubyの実装を持っています。

2

は、以下の質問を検討してください。

  1. は、クライアント上の生のデータを持つ任意の利点があるのでしょうか?場合によっては、ページの他の部分がデータを使用します。このような場合、ワイヤを介してデータを送信する方が意味があります。

  2. パフォーマンスの差異はありますか?総パイプラインを考えてみましょう。 HTMLを送信することは冗長になる可能性がありますが、サーバー上ではより速くレンダリングされますか?レンダリングされたHTMLをサーバーにキャッシュすることはできますか?

これらのどちらも一方向または他の方向に押し込まれない場合は、より保守的なコードベースを選択します。これは、特定の問題だけでなく、チームのスキルセットにも依存します。

ボブ

関連する問題