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

相關文章
相關標籤/搜索