我的回答
- 使用fragment来创建
- 使用shadowDOM
- 使用VNode
参考回答
缓存 DOM 对象
比如在循环之前就将节点获取并缓存到内存中,在循环内部直接引用,而不是重新查询
文档碎片
- document.createDocumentFragment()创建的文档碎片是个虚拟节点对象,对它的操作不会影响真实 dom,对它进行频繁操作,操作完成在一次性添加到真实的 dom 中;
- 把需要复杂操作的元素,先从页面移除再进行操作,操作完成再添加回来;
- 把需要复杂操作的元素复制一个副本 cloneNode(),在内存中进行操作再替换旧的;
使用 innerHtml 代替高频的 appendChild
RAF
把可能导致重绘的操作放到 RAF(requestAnimationFrame)中,浏览器空闲的时候去处理虚拟 DOM
Virtual DOM 本质是一个 JS 对象,DOM diff 之后最后在批量更新真实的 DOM 结构