js性能优化——文档片段document.createDocumentFragment

我们用原生JS进行开发时,经常会用到两种更新DOM节点的方法:innerHTML 和 appendChild()
innerHTML 会完全替换掉原先的节点内容。
appendChild() 方法接收的参数类型为单个的节点类型对象。当我们要添加多个子节点时,只能通过循环来实现。

例如:

for (var i = Things.length - 1; i >= 0; i--) {
    element.appendChild(Things[i]);
}

我们都知道,对DOM的操作次数越多,性能消耗也就越大。像这样的循环添加节点,循环了多少次,就对DOM操作了多少次,性能消耗明显是不划算的

而createDocumentFragment(),可以将节点进行打包,然后一次性插入到节点或者节点后面

DocumentFragments是DOM节点。它们不是主DOM树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到DOM树。在DOM树中,文档片段被其所有的子元素所代替。因为文档片段存在于内存中,并不在DOM树中,所以将子元素插入到文档片段时不会引起页面回流(对元素位置和几何上的计算)。因此,使用文档片段通常会带来更好的性能。

实例:
HTML

<ul></ul>

javaScript

var ulDom= document.querySelector('ul');
// 创建文档片段
var fragment = document.createDocumentFragment();

var nameList= ['张三', '李四', '王五'];

nameList.forEach(function(name) {
    // 创建li元素
    var li = document.createElement('li');
    li.textContent = name;
    // 此处往文档片段插入子节点,不会引起回流 (相当于打包操作)
    fragment.appendChild(li);  
});
// 将打包好的文档片段插入ul节点,只做了一次操作
element.appendChild(fragment);  
原文地址:https://www.cnblogs.com/uzi666/p/15330481.html