美文网首页
JS优化--- createDocumentFragment()

JS优化--- createDocumentFragment()

作者: Ghj_小树 | 来源:发表于2017-03-17 14:26 被阅读0次

    前言:在昨天的学习中,听老师介绍了createDocumentFragment()这个方法,好吧,我承认昨天是我第一次听说这个方法,今天查了资料,有了些许初步的了解,简单介绍一下吧

    一.首先,让我们看几种常见的动态创建html节点的方法,如下所示:

    方法 说明
    createAttribute(name) 用指定名称name创建特性节点
    createComment(text) 创建带文本text的注释节点
    createDocumentFragment() 创建文档碎片节点
    createElement(tagname) 创建标签名为tagname的节点
    createTextNode(text) 创建包含文本text的文本节点

    以上这些方法,每次JavaScript对DOM的操作都会改变当前页面的呈现,并重新刷新整个页面,从而消耗了大量的时间。而createDocumentFragment()的作用,就是可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。

    二,接下来正式介绍createDocumentFragment()

    DocumentFragment:表示文档的一部分(或一段),更确切地说,它表示一个或多个邻接的 Document 节点和它们的所有子孙节点。且不属于文档树,继承的 parentNode 属性总是 null。
    不过它有一种特殊的行为,该行为使得它非常有用,即当请求把一个DocumentFragment 节点插入文档树时,插入的不是 DocumentFragment 自身,而是它的所有子孙节点。这使得 DocumentFragment 成了有用的占位符,暂时存放那些一次插入文档的节点。 它还有利于实现文档的剪切、复制和粘贴操作。
    可以用Document.createDocumentFragment() 方法创建新的空DocumentFragment 节点。

    三.用法示例

    使用appendChild逐个向DOM文档中添加1000个新节点:

     for (var i = 0; i < 1000; i++)
      {
        var el = document.createElement('p');
        el.innerHTML = i;
        document.body.appendChild(el); //直接用appendChild向文档中插入节点
      }
    

    使用createDocumentFragment()一次性向DOM文档中添加1000个新节 点:

    var frag = document.createDocumentFragment();
    for (var i = 0; i < 1000; i++)
    {
      var el = document.createElement('p');
      el.innerHTML = i; 
      frag.appendChild(el); //首先将新节点先添加到DocumentFragment 节点
    }
    document.body.appendChild(frag);//然后用appendChild插入文档中
    

    四.总结

    我们可以理解为DocumentFragment (文档碎片节点)是一个插入结点时的过渡,我们把要插入的结点先放到这个文档碎片里面,然后再一次性插入文档中,这样就减少了页面渲染DOM元素的次数。经IE和FireFox下测试,在append1000个元素时,效率能提高10%-30%,FireFox下提升较为明显。
    不要小瞧这10%-30%,效率的提高是着眼于多个细节的,如果我们能在很多地方都能让程序运行速度提高10%-30%,那将是一个质的飞跃!

    相关文章

      网友评论

          本文标题:JS优化--- createDocumentFragment()

          本文链接:https://www.haomeiwen.com/subject/mfthnttx.html