如何高效操作 DOM 元素?( 三 )

virtualDOM 之所以号称高性能,其实现原理就与此类似 。
缓存元素集合
比如将通过选择器函数获取到的 DOM 元素赋值给变量,之后通过变量操作而不是再次使用选择器函数来获取 。
下面举例说明,假设我们现在要将上面代码所创建的 1 万个 div 元素的文本内容进行修改 。每次重复使用获取选择器函数来获取元素,代码以及时间消耗如下所示 。
for (let i = 0; i < document.querySelectorAll('div').length; i++) {document.querySelectorAll(`div`)[i].innerText = i}如果能够将元素集合赋值给 JavaScript 变量,每次通过变量去修改元素,那么性能将会得到不小的提升 。
const divs = document.querySelectorAll('div')for (let i = 0; i < divs.length; i++) {divs[i].innerText = i}对比两者耗时占比图可以看到,两者的渲染时间较为接近 。但缓存元素的方式在黄色的 Scripting 耗时上具有明显优势 。
总结
本课时从深入理解 DOM 的必要性说起,然后分析了 DOM 操作耗时的原因,最后再针对这些原因提出了可行的解决方法 。
除了这些方法之外,还有一些原则也可能帮助我们提升渲染性能,比如:
尽量不要使用复杂的匹配规则和复杂的样式,从而减少渲染引擎计算样式规则生成 CSSOM 树的时间;
尽量减少重排和重绘影响的区域;
使用 CSS3 特性来实现动画效果 。
希望你首先能理解原因,然后记住这些方法和原则,编写出高性能代码 。
最后布置一道思考题:说一说你还知道哪些提升渲染速度的方法和原则?
 


【如何高效操作 DOM 元素?】


推荐阅读