Je lisais à propos des fragments de document et de la refusion DOM et je me suis demandé en quoi il était document.createDocumentFragment
différent document.createElement
car il semble qu'aucun d'eux n'existait dans le DOM jusqu'à ce que je les ajoute à un élément DOM.
J'ai fait un test (ci-dessous) et tous ont pris exactement le même temps (environ 95 ms). À une supposition, cela pourrait être dû au fait qu'aucun style n'est appliqué à l'un des éléments, donc pas de redistribution peut-être.
Quoi qu'il en soit, sur la base de l'exemple ci-dessous, pourquoi devrais-je utiliser createDocumentFragment
au lieu de createElement
lors de l'insertion dans le DOM et quelle est la différence entre les deux.
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');
la source
createFragment
et lacreateElement
mémoire ont à peu près le même effet car ils ont tous deux mis à jour le DOM par lots au lieu de le mettre à jour de manière itérative plusieurs fois. Alors que le principal avantage decreateFragment
est qu'il vous offre la possibilité de choisir les éléments enfants à ajouter gratuitement? Corrigez-moi si je me suis trompé.Une autre différence très importante entre la création d'un élément et un fragment de document:
Lorsque vous créez un élément et l'ajoutez au DOM, l'élément est ajouté au DOM, ainsi que les enfants.
Avec un fragment de document, seuls les enfants sont ajoutés.
Prenons le cas de:
ce qui entraîne ce HTML malformé (espace ajouté)
la source