createDocumentFragment

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

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

 

 

调用屡次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.spa

下面是2段测试程序:code

var d1 = new Date();orm

//建立十个段落,常规的方式对象

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

var p = document_createElement_x_x_x("p");rem

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中。

相关文章
相关标签/搜索