zoukankan      html  css  js  c++  java
  • 认识createDocumentFragment

    今天在看vue源码解析时候发现一个api没有见过,一查是原生的,赶紧补漏。

    DocumentFragments 是DOM节点。它们不是主DOM树的一部分。通常的用例是创建文档片段,将元素附加到文档片段,然后将文档片段附加到DOM树。在DOM树中,文档片段被其所有的子元素所代替。

    因为文档片段存在于内存中,并不在DOM树中,所以将子元素插入到文档片段时不会引起页面回流(reflow)(对元素位置和几何上的计算)。因此,使用文档片段document fragments 通常会起到优化性能的作用(better performance)。

        比如动态添加多个文本节点或者元素节点时,调用多次document.body.append(),每次都要刷新页面一次。效率也就大打折扣了,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可。

    他支持以下DOM2方法: 
    a, cloneNode, hasAttributes, hasChildNodes, insertBefore, normalize, removeChild, replaceChild. 
    也支持以下DOM2属性: 
    attributes, childNodes, firstChild, lastChild, localName, namespaceURI, nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix, previousSibling, textContent.

    下面是2段测试程序:

    var d1 = new Date();

    //创建十个段落,常规的方式

    for(var i = 0 ; i < 1000; i ++) {

        var p = document_createElement_x_x_x("p");

        var oTxt = document_createTextNode("段落" + i);

        p.a(oTxt);

        document.body.a(p);

    }

    var d2 = new Date();

    document.write("第一次创建需要的时间:"+(d2.getTime()-d1.getTime()));

    //使用了createDocumentFragment()的程序

    var d3 = new Date();

    var pFragment = document_createDocumentFragment();

    for(var i = 0 ; i < 1000; i ++) {

        var p = document_createElement_x_x_x("p");

        var oTxt = document_createTextNode("段落" + i);

        p.a(oTxt);

        pFragment.a(p);

    }

    document.body.a(pFragment);

    var d4 = new Date();

    document.write("第2次创建需要的时间:"+(d4.getTime()-d3.getTime()));

    注:document_createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。

    本文部分内容摘自《莫尘的博客》,链接地址:http://blog.sina.com.cn/s/blog_667a8c2f010113zw.html

  • 相关阅读:
    php发送http请求带json格式数据
    a标签跳转,打开一个新页面
    echarts图例多行显示,并且全部对齐
    原子性,有序性,可见性
    winds消息大全
    C#中的结构体和对象区别
    装饰者模式
    hashMapp
    linux 定时任务
    windsServer2008设置定时重启
  • 原文地址:https://www.cnblogs.com/wuyuchao/p/8611829.html
Copyright © 2011-2022 走看看