createDocumentFragment有什么作用呢?
他支持以下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 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 ++) {
}
document.body.a(pFragment);
var d4 = new Date();
document.write("第2次创建需要的时间:"+(d4.getTime()-d3.getTime()));
注:document_createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。
Slow:
var list = ['foo', 'bar', 'baz'], elem, contents; for (var i = 0; i < list.length; i++) { elem = document.createElement('div'); content = document.createTextNode(list[i]); elem.appendChild(content); document.body.appendChild(elem); }
Faster:
var fragment = document.createDocumentFragment(), list = ['foo', 'bar', 'baz'], elem, contents; for (var i = 0; i < list.length; i++) { elem = document.createElement('div'); content = document.createTextNode(list[i]); fragment.appendChild(content); } document.body.appendChild(fragment);