Sono stato reading about document fragments e DOM reflow e mi sono chiesto come lo document.createDocumentFragment
differisse da document.createElement
poiché sembra che nessuno di essi esista nel DOM finché non li aggiungo a un elemento DOM.Devo utilizzare document.createDocumentFragment o document.createElement
Ho eseguito un test (di seguito) e tutti hanno richiesto esattamente lo stesso tempo (circa 95ms). Ad una ipotesi questo potrebbe essere dovuto al fatto che non ci sono stili applicati a nessuno degli elementi, quindi nessun reflow può essere.
In ogni caso, in base all'esempio seguente, perché dovrei utilizzare createDocumentFragment
invece di createElement
quando si inserisce nel DOM e quale è la differenza tra i due.
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');
Questo suona come un lavoro per jsperf. Sì? No? – Nenotlep