• createDocumentFragment


    DocumentFragment 是“轻量级”或“最小”Document 对象。希望能够提取文档树的一部分或创建文档的新片段是很常见的。设想实现像剪切这样的用户命令或通过来回移动片段重新安排文档。需要有一个可以保存此类片段的对象,很自然出于此目要使用一个 Node。当Document 对象真正可以完成此职责时,Document 对象可能为重量级对象,具体取决于基础实现。此操作真正需要的是非常轻量级的对象。DocumentFragment 就是这样的对象。

    此外,多种操作(如作为另一个 Node 的子节点插入节点)可能将 DocumentFragment 对象作为参数;这样会导致将 DocumentFragment 的所有子节点移动到此节点的子列表。

     

     

    调用多次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中。

  • 相关阅读:
    Python3安装
    HTML基础
    Python Socket
    python常用模块
    JSON.stringify的三个参数
    判断数组中存在重复元素
    vant-ui表单验证
    如何计算出浏览器的帧数?requestAnimationFrame
    js判断两个区间是否存在交集
    怎么在组件内部判断出是否插入了slot
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/3346487.html
Copyright © 2020-2023  润新知