DocumentFragment 接口表示一个没有父级文件的最小文档对象。它被当做一个轻量版的 Document 使用,用于存储已排好版的或尚未打理好格式的XML片段。最大的区别是因为DocumentFragment不是真实DOM树的一部分,它的变化不会引起DOM树的重新渲染的操作(reflow) ,且不会导致性能等问题。

最常用的方法是使用文档片段(DocumentFragment)作为参数(例如,任何 Node 接口类似 Node.appendChildNode.insertBefore) 的方法),这种情况下被添加(append)或被插入(inserted)的是片段的所有子节点, 而非片段本身。因为所有的节点会被一次插入到文档中,而这个操作仅发生一个重渲染的操作,而不是每个节点分别被插入到文档中,因为后者会发生多次重渲染的操作。

如果需要多次更新 DOM ,可以使用 DocumentFragment 来合并 DOM 节点,然后一次性插入 DOM 中。

  1. for (var i = 0; i < 1000; i++) {
  2. var el = document.createElement('p');
  3. el.innerHTML = i;
  4. document.body.appendChild(el);
  5. }
  6. //可以替换为:
  7. var frag = document.createDocumentFragment();
  8. for (var i = 0; i < 1000; i++) {
  9. var el = document.createElement('p');
  10. el.innerHTML = i;
  11. frag.appendChild(el);
  12. }
  13. document.body.appendChild(frag);

引用