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

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

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

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

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

另一方面,我有一些使用生成的HTML的原因。

  1. 它是简单的标记,通常与JSON一样紧凑或实际上更紧凑。

  2. 它不容易出错,因为你得到的只是标记,没有代码。

  3. 在大多数情况下编程会更快,因为您不必为客户端单独编写代码。

你是哪一方,为什么?


有只小跳蛙
浏览 918回答 3
3回答

慕村9548890

我实际上是双方都有点:当我在javascript方面需要的是数据时,我使用JSON当我在javascript方面需要的是我不会做任何计算的演示时,我通常使用HTML使用HTML的主要优点是,当您想要使用Ajax请求返回的内容替换页面的完整部分时:在JS中重新构建页面的一部分是非常困难的您可能已经在服务器端有一些模板引擎,它首先用于生成页面...为什么不重用它?我通常不会真正考虑事物的“性能”方面,至少在服务器上:在服务器上,生成一部分HTML或一些JSON可能不会产生太大的影响关于通过网络的东西的大小:好吧,你可能不会使用数百KB的数据/ html ...在你传输的任何东西上使用gzip会产生最大的不同(不是在HTML之间选择)和JSON)但是,可以考虑的一件事是,客户端需要从JSON数据中重新创建HTML&nbsp;(或DOM结构)的资源...将其与将部分HTML推入页面进行比较; - )最后,有一点非常重要:你需要多长时间来开发一个新的系统,将JS作为HTML注入页面所需的JSON +代码发送数据?返回HTML需要多长时间?如果您可以重用一些已有的服务器端代码,可以使用多长时间?并回答另一个答案:如果您需要更新页面的多个部分,仍然有解决方案/黑客将所有这些部分发送到一个大字符串中,该字符串将多个HTML部分组合在一起,并在JS中提取相关部分。例如,您可以返回一些如下所示的字符串:<!--&nbsp;MARKER_BEGIN_PART1&nbsp;-->here&nbsp;goes&nbsp;the&nbsp;html code&nbsp;for&nbsp;part&nbsp;1<!--&nbsp;MARKER_END_PART1&nbsp;--><!--&nbsp;MARKER_BEGIN_PART2&nbsp;-->here&nbsp;goes&nbsp;the&nbsp;html code&nbsp;for&nbsp;part&nbsp;2<!--&nbsp;MARKER_END_PART2&nbsp;--><!--&nbsp;MARKER_BEGIN_PART3&nbsp;-->here&nbsp;goes&nbsp;the&nbsp;json&nbsp;data that&nbsp;will&nbsp;be&nbsp;used&nbsp;to&nbsp;build&nbsp;part&nbsp;3 from&nbsp;the&nbsp;JS&nbsp;code<!--&nbsp;MARKER_END_PART3&nbsp;-->这看起来并不是很好,但它确实很有用(我已经使用了很多次,主要是当HTML数据太大而无法封装到JSON中时):你正在为页面的各个部分发送HTML需要演示,并且您正在为您需要数据的情况发送JSON ......为了提取这些,我猜想JS子串方法会起作用;-)

SMILET

好,我是那些喜欢以这种方式分离事物的少数人之一: - 服务器负责提供数据(模型);&nbsp;- 客户负责显示(查看)和操纵数据(模型);因此,服务器应该专注于交付模型(在这种情况下,JSON更好)。这样您就可以获得灵活的方法。如果要更改模型的视图,可以让服务器发送相同的数据,只需更改将数据更改为视图的客户端javascript组件即可。想象一下,您有一台服务器向移动设备和桌面应用程序提供数据。此外,这种方法提高了工作效率,因为服务器和客户端代码可以同时构建,永远不会失去焦点,这是当你从js切换到PHP / JAVA /等时会发生的事情。一般来说,我认为大多数人更喜欢在服务器端尽可能多地做,因为他们不掌握js,所以他们试图尽可能地避免它。基本上,我和那些正在研究Angular的人有同样的看法。在我看来,这是Web应用程序的未来。
打开App,查看更多内容
随时随地看视频慕课网APP