什么更快? Ajax加载JSON或Ajax加载完成输出

我想看到不同的观点/意见。

我有jquery通过ajax调用函数。 它通过两种方式加载数据:

  • ajax脚本从相同的服务器加载JSON数据,然后使用JS解析并附加到html中。

  • ajax脚本直接通过被调用的php脚本加载完整的HTML /脚本,然后将JS附加到html div。

  • 我假设#1是加载一个基本的JSON数组,然后使用JS解析它并追加到HTML,因此速度更快。

    意见?

    谢谢!


    有很多变数。 #1的速度可能会更快,前提是您的JavaScript没有将结果拼凑起来,并假设数据明显小于等效标记。 如果你把结果拼凑起来,或者如果数据并不比标记小得多,它可能会变慢。 它还取决于用户网络连接的速度与其CPU和浏览器的速度(Chrome相当快,IE7相当慢)等。

    在零碎的事情上:例如,如果你正在加载一个200行的表,并且你正在像这样构建行:

    // ...stuff that initializes `tableBody` and clears out old stuff...
    for (index = 0; index < stuff.length; ++index) {
        tr = $("tr");
        tr.append("td").html(stuff[i].a);
        tr.append("td").html(stuff[i].b);
        tr.append("td").html(stuff[i].c);
        tableBody.append(tr);
    }
    

    ...那么与浏览器如何通过等价标记相比,这可能会相当缓慢。

    但是,如果你更像这样做:

    markup = [];
    for (index = 0; index < stuff.length; ++index) {
        markup.push("<tr>");
        markup.push("<td>" + stuff[i].a + "</td>");
        markup.push("<td>" + stuff[i].b + "</td>");
        markup.push("<td>" + stuff[i].c + "</td>");
        markup.push("</tr>");
    }
    tableBody.append(markup.join(""));
    

    ...你的状态更好,因为在浏览器快速解析HTML的能力(从根本上说,浏览器的功能以及它们的优化目标)中,你可以最大程度地重用。

    看起来,乍看起来,与直接使用DOM方法或jQuery构建结构相比,构建一个字符串然后将其传递到浏览器的速度可能更快(甚至更快),这有点违反直觉。 但是你越多考虑它就越明显(是的,我已经测试过)为什么会这样。 DOM是浏览器必须映射到其内部结构的抽象,并且您对DOM方法进行的每次调用都会跨越JavaScript和浏览器的DOM引擎之间的边界层。 相比之下,向阵列添加速度快, join速度快(即使在现代浏览器中,字符串concat也很快)。 在浏览器中传递一个完整的字符串可以保持层次之间的最小距离,并让浏览器直接构建其内部结构,而不必担心它们的DOM等价物(直到/除非您稍后要求它们)。 我最后一次测试这是几年前,结果是戏剧性的。 我应该用当前的浏览器再试一次; 今天没有时间,但...


    说这两种解决方案哪一种更快是不可能的:这一切都取决于你在做什么,无论是在PHP方面,还是在JS方面。


    你应该考虑的主要是开发这些解决方案有多困难 - 如果这意味着重复一些努力:

  • PHP在你的服务器上运行; 你控制着环境; 并且不必为每种浏览器调整代码
  • 如果你使用Ajax显示一些东西,你可能想要显示那些使用非Ajax的东西 - 这意味着你可能已经有一些PHP代码来呈现它; 如果是这样的话,在JS中复制它可能需要更多的工作才能重用它。

  • 在您的服务器上执行操作意味着:

  • 大概多一点的网络使用情况:发送HTML而不是数据可能意味着更大的负载 - 但使用压缩,这不应该产生如此大的差异。
  • 在你的服务器上有更多的负载(你可以缓存一些东西),但是渲染通常比从数据库获取数据要耗费更少的资源

  • 最后,如果我能指出你对这个问题给出的答案: 为什么返回生成的HTML而不是JSON是不好的做法? 或者是?


    这个问题的答案取决于许多因素,包括:

  • 客户端计算机的速度(旧机器通常会在复杂的JS解析和计算上窒息)
  • 网络速度和生成内容的大小(这主要适用于大型数据集,这些大型数据集会转化为更大的html结果)
  • 数据操作功能的性质在做
  • 链接地址: http://www.djcxy.com/p/47887.html

    上一篇: What's faster? Ajax loading JSON or Ajax loading complete output

    下一篇: Do you Ajax JSON or HTML?