最小化浏览器重排/重新渲染

时间:2014-12-05 07:08:48

标签: javascript dom optimization reflow

我正在为我的硕士论文编写一些代码。关于有效的DOM操作,我有几个问题。

1)考虑到你必须在多个彼此接近的节点上执行一堆DOM操作。对所有这些节点的最顶层parentNode进行深度复制(并将其保留在DOM之外)是否有意义,对该子树执行操作,然后将其与DOM中的对应项交换。这会最小化浏览器重排/重新渲染吗?

2)改变节点的innerHTML是否比操纵它的子树更多/更少的性能?

3)在vanilla javaScript(没有任何框架/库)中,有没有更好的建议可以给我高效的DOM操作?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

要防止过多的浏览器呈现,最重要的事情是确保对读写进行分组。

如果你需要对几个节点做一些事情,并且需要从它们读取一些东西,那么你应该首先从所有节点读取,然后写入所有节点。

DOM的工作方式是每次需要读取它时,它会检查它是否已更改。如果是,浏览器将重新呈现。

因此,首先选择所有元素,缓存您需要获取的信息,然后设置所有元素。

答案 1 :(得分:0)

  

1)考虑您必须对一个数字执行一堆DOM操作   彼此靠近的节点做出一个合理的选择   所有这些节点的最高父节点的深层副本(并保留它   在DOM之外),对该子树执行操作,然后   将其与DOM中的对应项交换。这会最小化浏览器吗   回流/重新渲染?

是-对对方进行更改

  

2)改变节点的innerHTML性能比/降低性能   操纵它的子树?

性能更高-因为您在dom之外进行字符串操作

  

3)关于有效的DOM,您还有其他更好的建议吗?   在香草javaScript中进行操作(没有任何框架/库)?

document.createDocumentFragment()是有史以来最好的完全可控虚拟dom