瞭解DocumentFragment 給我們帶來的性能優化

JavaScript裏還有這樣一個很有用的東西:DocumentFragment。程序員可以使用DocumentFragment將一批子元素添加到任何類似node的父節點上,對這批子元素的操作不需要一個真正的根節點。程序員可以不依賴可見的DOM來構造一個DOM結構,而效率高是它真正的優勢,試驗表明,它比直接操作DOM快70%。

DocumentFragment例子

我們要使用UL元素,然後往裏面插入LI元素:

<ul id="list"></ul>

DOM插入和修改是一個很費力耗時的工作,所以,這樣的交互越少越好。這就是DocumentFragment發揮功用的地方了。第一步我們先創建一個DocumentFragment:

// Create the fragment
var frag = document.createDocumentFragment();

DocumentFragment實際上像一個僞DOM節點,在這個例子裏你可以把它當成虛擬的UL元素。現在,我們開始往裏面加入元素:

// Create numerous list items, add to fragment
for(var x = 0; x < 10; x++) {
    var li = document.createElement("li");
    li.innerHTML = "List item " + x;
    frag.appendChild(li);
}

往DocumentFragment裏添加元素就跟你操作普通的DOM節點一樣。一旦頁面DOM加載完成,你可以訪問了,你就可以把DocumentFragement掛到它的父節點上:

// Mass-add the fragment nodes to the list
document.body.appendChild(frag);

使用DocumentFragement要比直接對DOM節點操作要快的多,而且程序員可以利用新DOM節點來操作DocumentFragement,這樣比操作整個頁面DOM要更容易。所以,當需要進行大量DOM操作時,儘量使用DocumentFragement,它會讓你的應用變的更快!

以下爲demo的全部代碼:

<body>
<ul id="list"></ul>
<script>
var frag= document.createDocumentFragment();
for(var i = 0 ; i < 10; i ++) {
    var li = document.createElement("li");
    li.innerHTML = "List item " + i;
    frag.appendChild(li);
}
document.getElementById("list").appendChild(frag);
</script>
</body>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章