zoukankan      html  css  js  c++  java
  • 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);  
    
  • 相关阅读:
    A1020 Tree Traversals [中序后序建树]
    bfs 找步数最少的迷宫路径
    hdu 1241
    hdu 素数环
    A1054 The Dominant Color [map]
    A1097 Deduplication on a Linked List [链表去重]
    C# 中Dictionary的用法及用途
    C#文件操作
    C# 属性概述
    C# Lock的用法
  • 原文地址:https://www.cnblogs.com/uzi666/p/15330481.html
Copyright © 2011-2022 走看看