1. ホーム
  2. ジャバスクリプト

[解決済み】JSONの代わりに生成されたHTMLを返すのは、なぜ悪い習慣なのでしょうか?それともそうなのですか?

2022-03-29 20:53:42

質問

JQueryやその他の類似のフレームワークを使用して、カスタムURL/WebサービスからHTMLコンテンツを読み込むのは非常に簡単です。私はこの方法を何度も使用しており、現在に至るまで、満足のいくパフォーマンスであることを確認しています。

でも、どの本も、どの専門家も、生成されたHTMLの代わりにJSONを使うように言ってくるんです。JSONはHTMLよりもずっと優れているのでしょうか?

非常に高速ですか?

サーバーへの負荷は非常に少ないのでしょうか?

一方、生成されたHTMLを使う理由もあるんです。

  1. シンプルなマークアップで、JSONと同じかそれ以上にコンパクトになることが多いからです。
  2. マークアップだけで、コードがないため、エラーが起こりにくい。
  3. クライアント側で別途コードを書く必要がないので、ほとんどの場合、プログラミングが速くなります。

あなたはどちら派ですか、またその理由は?

解決方法は?

実は、私はどちらの立場でもあるのですが......。

  • 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のサブストリングメソッドが有効でしょうね;-)