什么更快? 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方面。
你应该考虑的主要是开发这些解决方案有多困难 - 如果这意味着重复一些努力:
在您的服务器上执行操作意味着:
最后,如果我能指出你对这个问题给出的答案: 为什么返回生成的HTML而不是JSON是不好的做法? 或者是?
这个问题的答案取决于许多因素,包括:
上一篇: What's faster? Ajax loading JSON or Ajax loading complete output