我有一个纯JavaScript函数,用于测试向DOM添加大量元素:
var start = new Date().getTime();
var blah;
var div = document.getElementById("me");
for (i = 0; i < 5000; ++i) {
div.innerHTML += "<div>" + i + "</div>";//Simply add to div.
}
var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time);
结果:
Chrome IE10
------ -----
Vanilla 39 130 (seconds)
JQuery:
for (i = 0; i < 5000; ++i) {
$("#me").append("<div>" + i + "</div>");//Now using append instead.
}
结果
Chrome IE10
------ -----
Vanilla 39000 130,000 (milliseconds)
JQuery 260 1300 (milliseconds)
NB:使用 $("#me")
选择器或传递 $(div)
看起来不会对性能产生影响。
使用 AppendChild
的原始JavaScript:
for (i = 0; i < 5000; ++i) {
var el = document.createElement("div");//Now create an element and append it.
el.innerHTML = i;
div.appendChild(el);
}
Chrome IE10
------ -----
Vanilla 39000 130,000 (ms)
JQuery 260 1300 (ms)
AppendChild 30 240 (ms)
我非常惊讶,这是迄今为止最快、最高效的。在Chrome上大约需要30毫秒,在IE上需要约240毫秒。
你可以在这里尝试各种变化:Fiddle 我知道还可能有许多其他的变化需要测试,但是jQuery在幕后做了什么,使得它的
.append()
比本地JS的innerHTML +=
更快,为什么创建一个新元素并将其附加甚至更快?
append
的源代码吗?你确定你正在比较同类项吗?真正的问题是:你是否使用了正确的函数来快速定位元素;一旦找到结果,你是否缓存了它;这些函数(innerHTML
)是否正在执行你认为它们要执行的操作(并且只执行这些操作)以及将HTML添加到DOM的最快方法是什么(可能有多种方法!)。 - George Stockerappend
将 HTML 字符串 插入到 #document_fragment 中,然后再插入到 DOM 中,而innerHTML
每次都需要重新解析整个 DOM 部分。使用createElement
的本机 DOM 方法比append
更快,因为它不必解析任何 _HTML_(直到再次设置该部分的 _innerHTML_)。 - Paul S.innerHTML
也会删除已注册到重新解析的内容的事件处理程序。 - Paul S.alert
是_JavaScript_实现中的本地函数。 </梦想世界> - Paul S.