• 前端性能优化之文档片段节点


    前端性能优化之文档片段节点

      我们知道,操作DOM是非常耗时的,并且直接在DOM上操作会使得页面不断的重排和重绘。 

      所以我们可以使用“文档片段节点”,即DocumentFragment。

     

      使用方法: 将将我们希望添加的元素先添加到DocumentFragment上,然后在将它添加到DOM上。

      方法: var fragment = document.createDocumentFragment(); 这样就创建了文档片段节点。

      文档片段节点具有下面的几个属性:

    console.log(fragment.nodeType);//11
    console.log(fragment.nodeValue);//null
    console.log(fragment.nodeName);//'#document-fragment'
    console.log(fragment.parentNode);//null

      

    具体使用:  在添加元素时,我们常常会使用appendChild()添加元素,这会导致不断的重排和重绘。 而使用document.createDocumentFragment()可以不影响DOM树,最后只会导致一次重排,如下所示:

      

     
    <ul id="list1"></ul>
    <script>
    var list1 = document.getElementById('list1');
    console.time("time");
    var fragment = document.createDocumentFragment();
    for(var i = 0; i < 500000; i++){
        fragment.appendChild(document.createElement('li'));
    }
    list1.appendChild(fragment);
    console.timeEnd('time');
    </script>
    
    <ul id="list"></ul>
    <script>
    var list = document.getElementById('list');
    console.time("time");
    for(var i = 0; i < 500000; i++){
        list.appendChild(document.createElement('li'));
    }
    console.timeEnd('time');
    </script>
     

    最终输出的时间如下:

    time: 112.912ms
    time: 63.789ms

     这里使用文档节点的时间更长一些,应该是主页面的内容太少了,如果主页面的东西很多,那么使用文档节点应当会省时一些。

    注意: 这里console.time("time"); console.timeEnd("time");  可以打印出两者之间的时间。

  • 相关阅读:
    小技巧与阅读感悟
    Android常见漏洞介绍(1):Intent Scheme URL 攻击
    利用Mallet工具自动挖掘文本Topic
    Xie Tao的几个小建议PPT:关于读Paper,如何与他人交流,赶Deadline
    Python解析DNS数据包
    iOS 横竖屏适配 笔记
    多工程联编,cocopods的使用
    Call to unavailable function 'system': not available on iOS
    xxx referenced from: xxx in xxx.o
    YYModel学习总结YYClassInfo(1)
  • 原文地址:https://www.cnblogs.com/zhilu/p/13837242.html
Copyright © 2020-2023  润新知