我是reading about document fragments和DOM回流,并且想知道document.createDocumentFragment
与document.createElement
有什么不同,因为它看起来好像都不存在于DOM中,直到我将它们追加到DOM元素。我是否应该使用document.createDocumentFragment或document.createElement
我做了一个测试(下面),他们都花费了完全相同的时间(约95ms)。据猜测,这可能是由于没有适用于任何元素的样式,所以没有回流。
无论如何,基于下面的例子,为什么插入DOM时我应该使用createDocumentFragment
而不是createElement
以及两者之间的差异。
var htmz = "<ul>";
for (var i = 0; i < 2001; i++) {
htmz += '<li><a href="#">link ' + i + '</a></li>';
}
htmz += '<ul>';
//createDocumentFragment
console.time('first');
var div = document.createElement("div");
div.innerHTML = htmz;
var fragment = document.createDocumentFragment();
while (div.firstChild) {
fragment.appendChild(div.firstChild);
}
$('#first').append(fragment);
console.timeEnd('first');
//createElement
console.time('second');
var span = document.createElement("span");
span.innerHTML = htmz;
$('#second').append(span);
console.timeEnd('second');
//jQuery
console.time('third');
$('#third').append(htmz);
console.timeEnd('third');
这听起来像jsperf工作。是?没有? – Nenotlep 2013-11-21 11:16:03