Я пытаюсь использовать jsperf, чтобы проверить , может ли временное отсоединение контейнера от document
ускорить изменение его содержимого (удаление / добавление нескольких элементов).Но код, который работает для меня в консоли, выдает мне ошибку в jsperf.
Подготовка:
<div id="container">
<ul></ul>
</div>
// fill the list
var container = document.querySelector('#container');
var listElement = container.firstChild;
var initialContent = "";
for(var i = 0; i < 100; i++)
initialContent += `<li>${i+1}</li>`;
listElement.innerHTML = initialContent;
разрыв (важно не использовать listElement.innerHTML = ''
):
while(listElement.firstChild)
listElement.removeChild(listElement.firstChild);
основной код для профиля:
listElement = container.removeChild(listElement);
while(listElement.firstChild)
listElement.removeChild(listElement.firstChild);
var newListItem;
for(var j = 100; j < 200; j++) {
newListItem = document.createElement('li');
newListItem.appendChild(document.createTextNode(j));
listElement.appendChild(newListItem);
}
container.appendChild(listElement);
код для сравнения:
while(listElement.firstChild)
listElement.removeChild(listElement.firstChild);
var newListItem;
for(var j = 100; j < 200; j++) {
newListItem = document.createElement('li');
newListItem.appendChild(document.createTextNode(j));
listElement.appendChild(newListItem);
}
Я получаю ошибку:
Uncaught HierarchyRequestError:Не удалось выполнить appendChild на узле. Этот тип узла не поддерживает этот метод.
Он исчезнет, если я закомментирую строку listElement.appendChild(newListItem);
Добавление точки останова через строку debugger;
показывает, что listElement
является каким-то текстовым узлом ..