這裏對我目前瞭解的DOM API createElement和createDocumentFragment進行簡單的闡述:
- createElement()
該方法一般帶有一個標籤名參數,用於創建nodeType=1的元素節點,如:
var div = document.createElement('div')
- createDocumentFragment()
該方法不帶參數,用於創建nodeType=11的文檔片段節點,如:
var ftagment = document.createDocumentFragment()
創建的fragment不在主DOM樹中,且它本身不作爲一個DOM節點,而是一個容器,將其他的子節點包含其中。因爲它不在主DOM樹中這個特點,當需要在其中添加大量的子節點的時候,最後再將其添加到主DOM樹中並不會引起頁面中元素的迴流和重繪,因此可以提升頁面性能。
這裏要注意的是,用createDocumentFragment生成的fragment只能append一次,即只能被放進DOM樹中一次(這裏貌似跟內存有關,不是很清楚)
迴流:元素的位置/尺寸/內容發生變化,或者激活CSS僞類(例如::hover),或者查詢某些屬性或調用某些方法(這篇文章中有對應的這些方法)會引起迴流。
重繪:元素的顏色/背景色/可見性等不影響其位置的屬性發生變化會引起重繪。
因此,當對頁面性能要求比較高市,可儘量採用createDocumentFragment方法來動態生成文檔片段。