Estaba reading about document fragments y DOM reflow y me preguntaba cómo document.createDocumentFragment
difería de document.createElement
ya que parece que ninguno de ellos existe en el DOM hasta que los anexo a un elemento DOM.Debería usar document.createDocumentFragment o document.createElement
Hice una prueba (a continuación) y todas tomaron exactamente la misma cantidad de tiempo (aproximadamente 95ms). Supongo que esto podría deberse a que no se aplica ningún estilo a ninguno de los elementos, por lo que no hay reflujo.
De todos modos, en función del ejemplo a continuación, ¿por qué debería utilizar createDocumentFragment
en lugar de al insertar en el DOM y cuál es la diferencia entre los dos.
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');
Esto suena como un trabajo para jsperf. ¿Sí? ¿No? – Nenotlep