使用文档片段或未附加的创建的 div 以避免多次命中 DOM 之间有区别吗?
假设我们要生成 100 个列表项......
我们页面的内容:
<ul class="list"></ul>
场景一:文档片段
在这种情况下,我们正在创建 li,用一些简单的文本填充它,然后将其附加到片段中。循环完成后,片段将附加到列表中。我们避免对 DOM 100x 执行 ping 操作,并且仅 ping 一次以附加片段。
var frag = document.createDocumentFragment();
for(var i = 1; i <= 100; i++) {
var li = document.createElement('li');
li.textContent = 'Item #' + i;
frag.append(li);
}
document.querySelector('.list').appendChild(frag);
场景 2:未附加的 div
在这种情况下,我们创建一个 div,它的作用类似于文档片段,因为它不在 DOM 中。我们将所有创建的 li 附加到 div 中,最后将 div 的内容附加到 DOM 中的列表中。
var div = document.createElement('div');
for(var i = 1; i <= 100; i++) {
var li = document.createElement('li');
li.textContent = 'Item #' + i;
div.append(li);
}
document.querySelector('.list').innerHTML = div.innerHTML;
这两种情况有什么区别?就避免多次 ping DOM 而言,似乎两者都达到了相同的结果。