前言
- vm/ 虚拟 DOM 做前端的肯定都不陌生了,react和vue中都使用了虚拟DOM
- 今天来说下虚拟 DOM 一定更快吗? 抬杠了
2. 是什么 what
- 虚拟 DOM 的主要优势在于它可以通过
比较
前后两个虚拟 DOM
树的差异来最小化
实际 DOM 的操作。- 通过将对实际 DOM 的修改集中处理,可以减少
回流
(Reflow)和重绘
(Repaint)的次数,从而提高性能。
3. 虚拟DOM不一定更快
- 虚拟 DOM 也引入了
额外的开销
。- 在每次
更新
时,需要生成新的虚拟 DOM 树,并与之前的虚拟 DOM 树进行比较
。- 这个比较过程需要
耗费
一定的计算资源
。而对于简单的应用或页面,直接操作实际 DOM 可能更快
,- 因为
省去
了虚拟 DOM 的生成
和比较
过程
- 虚拟 DOM 的性能还受到底层实现的影响。
- 不同的虚拟 DOM 实现可能在性能方面有所差异。
- 一些优化手段如 diff 算法的优化、批量更新等也会影响虚拟 DOM 的性能
- 案例
- 一个页面就有一个按钮,点击一下,数字加一,那肯定是直接操作DOM更快
4. react中呢
- react中涉及到虚拟DOM的代码主要分为以下三部分,其中核心是第二步的domDiff算法:
- 把
render
中的JSX(或者createElement这个API)转化成虚拟DOM
- 状态或属性改变后重新计算虚拟DOM并生成一个
补丁对象
(domDiff)- 通过这个补丁对象
更新
视图中的DOM节点
5. 那为啥还都用 虚拟DOM呢
- 因为使用虚拟DOM可以
提高
代码的性能下限
,- 并极大的
优化
大量操作DOM时产生的性能损耗
。- 同时这些框架也保证了,即使在
少数
虚拟DOM不太给力的场景下,性能
也在我们接受
的范围内。