为什么返回生成的 HTML 而不是 JSON 是一种不好的做法?还是?

2022-08-30 00:00:44

使用JQuery或任何其他类似的框架从自定义URL / Web服务加载HTML内容非常容易。我已经多次使用这种方法,直到现在,发现性能令人满意。

但是所有的书,所有的专家都试图让我使用JSON而不是生成的HTML。它比HTML优越得多吗?

它的速度快得多吗?
它在服务器上的负载是否要小得多?

另一方面,我有一些理由使用生成的HTML。

  1. 它是简单的标记,通常与JSON一样紧凑或实际上更紧凑。
  2. 它不容易出错,因为您得到的只是标记,没有代码。
  3. 在大多数情况下,编程会更快,因为您不必为客户端单独编写代码。

你站在哪一边,为什么?


答案 1

实际上,我有点两边:

  • 当我在javascript方面需要的是数据时,我使用JSON
  • 当我在javascript方面需要的是我不会进行任何计算的演示时,我通常使用HTML

使用HTML的主要优点是当您想要将页面的整个部分替换为Ajax请求返回的内容时:

  • 在JS中重新构建页面的一部分(相当)困难
  • 您可能已经在服务器端有一些模板引擎,该引擎最初用于生成页面...为什么不重用它?

我通常不会真正考虑“性能”方面的事情,至少在服务器上:

  • 在服务器上,生成一部分HTML或一些JSON可能不会产生太大的区别。
  • 关于通过网络的东西的大小:好吧,你可能不使用数百KB的数据/ html...在您要传输的任何内容上使用gzip将产生最大的区别(而不是在HTML和JSON之间进行选择)
  • 但是,可以考虑的一件事是,您需要在客户端上使用哪些资源来从JSON数据重新创建HTML(或DOM结构)...将其与将部分HTML推送到页面中进行比较;-)

最后,有一件事绝对重要:

  • 开发一个新系统需要多长时间才能将数据作为JSON发送+将JS作为HTML注入页面所需的代码?
  • 只返回 HTML 需要多长时间?如果您可以重用一些已经存在的服务器端代码,则需要多长时间?


并回答另一个答案 :如果您需要更新页面的多个部分,仍然有解决方案/黑客将所有这些部分发送到一个大字符串中,该字符串将几个HTML部分分组,并在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子字符串方法将完成这个技巧,我想;-)


答案 2

我基本上同意这里所说的意见。我只想将它们总结为:

  • 如果您最终在客户端解析HTML以对其进行一些计算,则发送HTML是不好的做法。

  • 发送JSON是一种不好的做法,如果你最终要做的就是将其合并到页面的DOM树中。