ajax html与xml/json响应-性能或其他原因

ajax html与xml/json响应-性能或其他原因,html,xml,ajax,json,Html,Xml,Ajax,Json,我有一个相当重ajax的站点,一些3k html格式的页面从ajax请求插入到DOM中 我一直在做的是获取html响应,然后使用jQuery插入整个内容 我的另一个选择是以xml(或者可能是json)输出,然后解析文档并将其插入页面 我注意到,大多数大型站点似乎都是以json/xml的方式工作的。Google Mail返回xml而不是格式化的html 这是因为性能问题吗?或者,使用xml/json与仅检索html相比,还有其他原因吗 从javascript的角度来看,注入直接html似乎是最简单

我有一个相当重ajax的站点,一些3k html格式的页面从ajax请求插入到DOM中

我一直在做的是获取html响应,然后使用jQuery插入整个内容

我的另一个选择是以xml(或者可能是json)输出,然后解析文档并将其插入页面

我注意到,大多数大型站点似乎都是以json/xml的方式工作的。Google Mail返回xml而不是格式化的html

这是因为性能问题吗?或者,使用xml/json与仅检索html相比,还有其他原因吗

从javascript的角度来看,注入直接html似乎是最简单的。在jQuery中,我只是这样做

jQuery.ajax({
    type: "POST",
    url: "getpage.php",
    data: requestData,
    success: function(response) {
        jQuery('div#putItHear').html(response);
    }
对于xml/json响应,我必须执行以下操作

jQuery.ajax({
    type: "POST",
    url: "getpage.php",
    data: requestData,
    success: function(xml) {
        $("message",xml).each(function(id) { 
            message = $("message",xml).get(id); 
            $("#messagewindow").prepend("<b>" + $("author",message).text() + 
            "</b>: " + $("text",message).text() + 
            "<br />"); 
        });
    }
});
jQuery.ajax({
类型:“POST”,
url:“getpage.php”,
数据:请求数据,
成功:函数(xml){
$(“消息”,xml)。每个(函数(id){
message=$(“message”,xml).get(id);
$(“#messagewindow”).prepend(“+$(“作者”,message).text()+
“:”+$(“文本”,消息).text()+
“
”; }); } });

从代码的角度来看,显然效率不高,而且我也不能期望它能提高浏览器性能,那么为什么要采用第二种方式呢?

它通常会减少传输的数据量,从而提高传输速度。由于网络上的任何东西通常都是流程中的瓶颈,因此减少传输时间将减少执行流程所需的总时间,从而改善用户体验。

通常,JSON是通过ajax检索数据的更有效方法,因为XML中的相同数据要大得多。JSON也更容易被客户端Javascript使用。然而,如果您正在检索纯HTML内容,我可能会按照您的建议执行。尽管如此,如果您真的需要,您可以将HTML内容嵌入JSON字符串中,并充分利用这两个方面

以下是发送JSON/XML而不是HTML的一些优点:

  • 如果数据要在应用程序之外使用,HTML可能更难解析并适合其他结构
  • JSON可以直接嵌入
    script
    标记中,允许跨域AJAX场景
  • JSON/XML保留了服务器端脚本和视图之间的关注点分离
  • 减少带宽

  • 与返回HTML相比,返回JSON/XML为应用程序提供了更多的自由,并且在不同领域(数据与标记)所需的特定知识更少

    由于数据仍然只是数据,您可以选择如何将其显示给客户端。这使得许多代码可以在客户端而不是服务器端执行——服务器端只需要知道数据结构,而不需要知道标记。程序员需要知道的就是如何传递数据结构

    客户机实现只需要知道如何显示服务器返回的数据结构,而不需要担心这些结构实际上是如何生成的。程序员需要知道的就是如何显示数据结构


    如果要构建另一个客户端(不使用HTML作为标记语言),则可以重用所有服务器组件。构建另一个服务器实现也是如此。

    我目前也在绞尽脑汁考虑这个决定,直到我看到Darin如何简化它时,它才真正起作用:

    “如果数据将在应用程序之外使用,则HTML可能更难解析并适合其他结构”

    我认为其中很大一部分是数据的去向。如果它是一个一次性应用程序,不需要在其他任何地方共享/发送数据,那么返回纯HTML就可以了,即使它确实更重

    就我个人而言,如果有复杂的HTML需要包装在数据周围,我只需要将HTML吐回并放入其中。jQuery非常好,但是用Javascript构建HTML通常是一件痛苦的事情。但这是一个平衡游戏。

    你应该看看,一个模板工具
    从JSON数据生成HTML。

    在某些情况下,AJAX响应需要返回更多信息,而不仅仅是要显示的HTML。例如,假设您正在从搜索返回前20个项目的列表。您可能需要返回要在DOM中其他位置显示的搜索结果总数。您可以尝试将总数放在一个隐藏的div中,但这可能会变得混乱。对于JSON,总计数可以是一个字段值,一个结构化JSON响应。

    对我来说,它归结为:

    对于我们许多人来说,使用我们习惯的服务器端成熟的模板引擎来生成html并将其发送到管道中比使用一堆javascript代码来生成html客户端要少得多。是的,现在有一些javascript模板引擎,可以在一定程度上缓解这种情况

    因为我已经分离了服务器端的模型、逻辑和视图,所以再分离一次并没有任何争议。JSON是一个视图,HTML是另一个视图

    让我们面对它;HTML/AJAX和JSON/AJAX都比管道上的完整页面好很多倍

    你可能需要考虑的最后一件事是;如果你想对搜索引擎友好——你可能必须以任何方式生成HTML服务器端(旧的“优雅降级”咒语)


    我通常做组合。如果有客户端逻辑,我使用JSON,否则我使用HTML。通知和自动完成特殊字段是通过JSON发送的。

    我已经为这些目的准备了一个xml版本。我更关心的是客户端处理html与xml/json的输入。对于服务器来说,创建xml和html没有太大区别。但如果我知道90%的请求将来自这个客户机,那么为什么要先使用xml呢?xml更容易构建,因为您不需要考虑它将如何显示。你现在需要担心的就是