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

问题描述 投票:0回答:2

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

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

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

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

先感谢您!

javascript dom optimization reflow
2个回答
1
投票

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

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

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

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


0
投票

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

是的 - 对应的更改

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.