[解決済み】JSONの代わりに生成されたHTMLを返すのは、なぜ悪い習慣なのでしょうか?それともそうなのですか?
質問
JQueryやその他の類似のフレームワークを使用して、カスタムURL/WebサービスからHTMLコンテンツを読み込むのは非常に簡単です。私はこの方法を何度も使用しており、現在に至るまで、満足のいくパフォーマンスであることを確認しています。
でも、どの本も、どの専門家も、生成されたHTMLの代わりにJSONを使うように言ってくるんです。JSONはHTMLよりもずっと優れているのでしょうか?
非常に高速ですか?
サーバーへの負荷は非常に少ないのでしょうか?
一方、生成されたHTMLを使う理由もあるんです。
- シンプルなマークアップで、JSONと同じかそれ以上にコンパクトになることが多いからです。
- マークアップだけで、コードがないため、エラーが起こりにくい。
- クライアント側で別途コードを書く必要がないので、ほとんどの場合、プログラミングが速くなります。
あなたはどちら派ですか、またその理由は?
解決方法は?
実は、私はどちらの立場でもあるのですが......。
- javascript側で必要なものが データ の場合、JSONを使用します。
- javascript側で必要なのは プレゼンテーション を使用し、その上で計算を行うことはありません。
HTMLを使用する主な利点は、Ajaxリクエストから戻ってきたものでページの大部分を置き換えたい場合です。
- JSでページの一部を再構築するのは(かなり)難しい
- おそらくサーバーサイドには、最初にページを生成するために使用されたテンプレートエンジンがすでにあるのでしょう...。なぜそれを再利用しないのですか?
私は一般的に、少なくともサーバー上では、物事の "パフォーマンス" の側面をあまり考慮しません。
- サーバー上では、HTMLの一部やJSONを生成しても、おそらくそれほど大きな違いはないでしょう。
- ネットワークを経由するもののサイズについて : まあ、何百KBものデータ/htmlを使うことはないでしょうけど......。転送するものにgzipを使用することが最大の違いになります。 (HTMLとJSONのどちらかを選ぶのではなく)
- しかし、ひとつだけ考慮すべきなのは、HTMLを再作成するためにクライアントでどのようなリソースが必要になるかということです。 (またはDOM構造) JSONデータから、HTMLの一部をページに押し込むのと比べてみてください;-)
最後に、決定的に重要なことをひとつだけ:
- データをJSONとして送信し、それをHTMLとしてページに挿入するために必要なJSをコーディングする新しいシステムを開発するには、どれくらいの時間がかかりますか?
- HTMLを返すだけならどれくらいかかりますか?また、すでにあるサーバーサイドのコードを再利用できるとしたら、どれくらいの時間がかかりますか?
また、別の回答ですが、ページの複数の部分を更新する必要がある場合、いくつかのHTML部分をグループ化した1つの大きな文字列の中にすべての部分を送信し、JSで関連する部分を抽出するという解決策/ハックがまだあります。
例えば、次のような文字列を返すことができます。
<!-- MARKER_BEGIN_PART1 -->
here goes the html
code for part 1
<!-- MARKER_END_PART1 -->
<!-- MARKER_BEGIN_PART2 -->
here goes the html
code for part 2
<!-- MARKER_END_PART2 -->
<!-- MARKER_BEGIN_PART3 -->
here goes the json data
that will be used to build part 3
from the JS code
<!-- MARKER_END_PART3 -->
見た目はあまりよくないが、役に立つことは間違いない。 (HTMLデータが大きすぎてJSONにカプセル化できないときに、何度か使ったことがあります。) : プレゼンテーションが必要な部分にはHTMLを送り、データが必要な場面ではJSONを送る...ということですね。
... そして、それらを抽出するには、JSのサブストリングメソッドが有効でしょうね;-)
関連
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] なぜ ++[[]][+[] +[+[]] は "10" という文字列を返すのでしょうか?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] parseInt(1/0, 19)はなぜ18を返すのですか?
-
[解決済み] JSONまたは部分的なhtmlを返すASP.NET MVCコントローラのアクション
-
[解決済み] なぜdocument.writeは「バッドプラクティス」と言われるのですか?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】「Uncaught SyntaxError」が何度も出てきます。予期しないトークン o" が表示される
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】中央値の計算 - javascript