使用JQuery或其他类似框架从自定义url /Web服务加载HTML内容非常容易。到目前为止,我已经多次使用这种方法,并发现性能令人满意。

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

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

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

它是简单的标记,通常和JSON一样紧凑,甚至更紧凑。 它更不容易出错,因为你得到的都是标记,而不是代码。 在大多数情况下,编程会更快,因为你不必为客户端单独编写代码。

你站在哪一边,为什么?


当前回答

如果你想要一个干净的解耦客户端(在我看来这是最佳实践),那么100%的DOM由javascript创建是有意义的。如果你构建了一个基于MVC的客户端,它拥有如何构建UI的所有知识,那么你的用户一次下载一个javascript文件,它就会缓存在客户端上。初始加载之后的所有请求都是基于Ajax的,并且只返回数据。这种方法是我发现的最干净的方法,它提供了一个干净独立的表示封装。

然后,服务器端只专注于交付数据。

所以,明天当产品要求你完全改变一个页面的设计时,你所改变的只是创建DOM的源JS,但可能会重用你已经存在的事件处理程序,而服务器是无关的,因为它100%与表示分离

其他回答

根据您的UI,您可能需要更新DOM中的两个(或多个)不同元素。如果你的响应是HTML格式的,你会解析它来确定内容在哪里吗?或者你也可以使用JSON散列。

你甚至可以结合它,返回一个JSON w/ html数据:)

{ 'dom_ele_1' : '<p>My HTML part 1</p>', 'dome_ele_2' : '<div>Your payment has been received</div>' }

我主要同意这里的观点。我想总结一下:

如果您最终要在客户端解析HTML以对其进行一些计算,那么发送HTML是一种糟糕的做法。 如果您最终所做的只是将JSON合并到页面的DOM树中,那么发送JSON是一种糟糕的做法。

HTML有许多冗余和不显示的数据,即标签,样式表等。 因此,与JSON数据相比,HTML的大小会更大,导致更多的下载和渲染时间,也会导致浏览器忙于渲染新数据。

如果你想要一个干净的解耦客户端(在我看来这是最佳实践),那么100%的DOM由javascript创建是有意义的。如果你构建了一个基于MVC的客户端,它拥有如何构建UI的所有知识,那么你的用户一次下载一个javascript文件,它就会缓存在客户端上。初始加载之后的所有请求都是基于Ajax的,并且只返回数据。这种方法是我发现的最干净的方法,它提供了一个干净独立的表示封装。

然后,服务器端只专注于交付数据。

所以,明天当产品要求你完全改变一个页面的设计时,你所改变的只是创建DOM的源JS,但可能会重用你已经存在的事件处理程序,而服务器是无关的,因为它100%与表示分离

发送json通常是在javascript小部件从服务器请求信息时完成的,比如列表、树视图或自动补全。这是当我将发送JSON,因为它是数据,将被解析和使用原始。然而,如果你只是要显示HTML,那么在服务器端生成它并在浏览器上显示它就会少很多工作。浏览器在使用innerHTML = ""直接将HTML插入dom时进行了优化,所以这样做不会出错。