Я читал о фрагментах документа и перекомпоновке DOM и задавался вопросом, чем они document.createDocumentFragment
отличаются от того, document.createElement
как кажется, что ни один из них не существует в DOM, пока я не добавлю их в элемент DOM.
Я провел тест (ниже), и все они заняли одинаковое количество времени (около 95 мс). Предположительно, это могло быть из-за того, что ни к одному из элементов не применялся стиль, поэтому возможно и никакого перекомпоновки.
В любом случае, исходя из приведенного ниже примера, почему я должен использовать его createDocumentFragment
вместо createElement
вставки в DOM и в чем разница между ними.
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');
источник
createFragment
и использованиеcreateElement
памяти имеет примерно такой же эффект, поскольку они оба пакетно обновляли DOM, а не итеративно обновляли несколько раз. Хотя основным преимуществомcreateFragment
является то, что он предлагает вам гибкость в выборе любых дочерних элементов для добавления бесплатно? Поправьте меня, если я ошибался.Еще одно очень важное различие между созданием элемента и фрагмента документа:
Когда вы создаете элемент и добавляете его в DOM, этот элемент добавляется к DOM вместе с дочерними элементами.
К фрагменту документа добавляются только дочерние элементы.
Возьмем случай:
что приводит к этому искаженному HTML (добавлен пробел)
источник