Html文檔碎片--Document?Fragment

  • 直譯過來就是文檔碎片,表示一個沒有父級文件的最小文檔對象。它被作為一個輕量版的 Document。最大的區(qū)別是因為 DocumentFragment 不是真實DOM樹的一部分,它的變化不會觸發(fā) DOM 樹的(重繪) ,且不會導致性能等問題。
  • 它主要用來解決dom元素的插入問題,比如需要插入多個dom節(jié)點時,可以創(chuàng)建一個Document?Fragment,把節(jié)點依次添加到Document?Fragment上,添加完畢后再把Document?Fragment添加到頁面document上,這樣只會產(chǎn)生一次重繪。而如果直接把dom節(jié)點依次添加到頁面document上就會引發(fā)多次重繪
  • 實際上現(xiàn)代瀏覽器對js引發(fā)重繪的操作也會進行節(jié)流控制的,比如短時間內(nèi)觸發(fā)了多次repaint的話,瀏覽器會將他們合并成一次repaint來處理,不過保險起見直接使用Document?Fragment即可。
  • 可以通過document.createDocumentFragment創(chuàng)建一個文檔碎片。
var oFrag=document.createDocumentFragment();

for (var i=0; i<1000; i++) {
  var op=document.createElement("div");
  var oText=document.createTextNode(‘i’);
  op.appendChild(oText);
  oFrag.appendChild(op);
}
document.body.appendChild(oFrag);
  • html原生的<template>標簽其實就是一個documentfragment,使用template標簽時,實際插入到document上面的是,template的子節(jié)點,它本身不會被添加到dom上面。
  • react框架也有類似template的文檔碎片概念:fragments,從而可以一個組件返回多個元素。
  • vue也使用了template標簽,不過他不允許一個組件模板上有多個父元素節(jié)點(必須有一個唯一父節(jié)點)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容