我正在为我的硕士论文编写一些代码。关于有效的DOM操作,我有几个问题。
1)考虑到你必须在多个彼此接近的节点上执行一堆DOM操作。对所有这些节点的最顶层parentNode进行深度复制(并将其保留在DOM之外)是否有意义,对该子树执行操作,然后将其与DOM中的对应项交换。这会最小化浏览器重排/重新渲染吗?
2)改变节点的innerHTML是否比操纵它的子树更多/更少的性能?
3)在vanilla javaScript(没有任何框架/库)中,有没有更好的建议可以给我高效的DOM操作?
提前谢谢!
答案 0 :(得分:1)
要防止过多的浏览器呈现,最重要的事情是确保对读写进行分组。
如果你需要对几个节点做一些事情,并且需要从它们读取一些东西,那么你应该首先从所有节点读取,然后写入所有节点。
DOM的工作方式是每次需要读取它时,它会检查它是否已更改。如果是,浏览器将重新呈现。
因此,首先选择所有元素,缓存您需要获取的信息,然后设置所有元素。
答案 1 :(得分:0)
1)考虑您必须对一个数字执行一堆DOM操作 彼此靠近的节点做出一个合理的选择 所有这些节点的最高父节点的深层副本(并保留它 在DOM之外),对该子树执行操作,然后 将其与DOM中的对应项交换。这会最小化浏览器吗 回流/重新渲染?
是-对对方进行更改
2)改变节点的innerHTML性能比/降低性能 操纵它的子树?
性能更高-因为您在dom之外进行字符串操作
3)关于有效的DOM,您还有其他更好的建议吗? 在香草javaScript中进行操作(没有任何框架/库)?
document.createDocumentFragment()是有史以来最好的完全可控虚拟dom