Ich habe über Dokumentfragmente und DOM-Reflow gelesen und mich gefragt, wie document.createDocumentFragment
unterschiedlich es ist, document.createElement
da es so aussieht, als ob keines von beiden im DOM vorhanden ist, bis ich sie an ein DOM-Element anhänge.
Ich habe einen Test gemacht (siehe unten) und alle haben genau die gleiche Zeit gebraucht (ca. 95 ms). Vermutlich könnte dies daran liegen, dass auf keines der Elemente ein Stil angewendet wurde, sodass möglicherweise kein Reflow möglich ist.
Wie auch immer, basierend auf dem folgenden Beispiel, warum sollte ich createDocumentFragment
anstelle des createElement
Einfügens in das DOM verwenden und was ist der Unterschied zwischen den beiden.
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');
quelle
createFragment
undcreateElement
Speicherplatz richtig verstehe, hat dies ungefähr den gleichen Effekt, da beide das DOM stapelweise aktualisiert haben, anstatt es mehrmals iterativ zu aktualisieren. Der Hauptvorteil voncreateFragment
ist, dass es Ihnen die Flexibilität bietet, die untergeordneten Elemente auszuwählen, die Sie kostenlos anhängen möchten. Korrigieren Sie mich, wenn ich falsch lag.Ein weiterer sehr wichtiger Unterschied zwischen dem Erstellen eines Elements und eines Dokumentfragments:
Wenn Sie ein Element erstellen und an das DOM anhängen, wird das Element an das DOM sowie an die untergeordneten Elemente angehängt.
Bei einem Dokumentfragment werden nur die untergeordneten Elemente angehängt.
Nehmen Sie den Fall von:
was zu diesem fehlerhaften HTML führt (Leerzeichen hinzugefügt)
quelle