我有一个vanilla 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);
Run Code Online (Sandbox Code Playgroud)
Chrome IE10
------ -----
Vanilla 39 130 (seconds)
Run Code Online (Sandbox Code Playgroud)
for (i = 0; i < 5000; ++i) {
$("#me").append("<div>" + i + "</div>");//Now using append instead.
}
Run Code Online (Sandbox Code Playgroud)
Chrome IE10
------ -----
Vanilla 39000 130,000 (milliseconds)
JQuery 260 1300 (milliseconds)
Run Code Online (Sandbox Code Playgroud)
注意:如果我使用$("#me")选择器或传入,它似乎对性能没有任何影响$(div)
AppendChild:for (i = 0; i < 5000; ++i) {
var el = document.createElement("div");//Now create an element and append it.
el.innerHTML = i;
div.appendChild(el);
}
Run Code Online (Sandbox Code Playgroud)
Chrome IE10
------ -----
Vanilla 39000 130,000 (ms)
JQuery 260 1300 (ms)
AppendChild 30 240 (ms)
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这是迄今为止最快,最高效的.在Chrome上它需要大约30ms左右,在IE上需要大约240ms.
你可以在这里玩所有的变化:小提琴
我知道可能还有许多其他变种需要测试,但是jQuery在幕后做什么才能让它.append()比原生JS快得多innerHTML +=,为什么要创建一个新元素并将其追加得更快?
在幕后,jQuery 正在使用文档片段,这比直接操作文档要好得多。John Resig 在 2008 年讨论了文档片段的卓越性能,这应该会给您一个关于 jQuery 正在做什么以及为什么这样做的可靠解释。