「React」问:虚拟DOM真的会让提升性能吗?

481 阅读1分钟

虚拟DOM是什么?

虚拟 DOM(Virtual DOM)本质上是JS 和 DOM 之间的一个映射缓存,它在形态上表现为一个能够描述 DOM 结构及其属性信息的 JS 对象。

在没有有虚拟DOM的时候

数据+模板 → 真实DOM

有了虚拟DOM之后,

数据+模板 → 虚拟DOM → 真实DOM

虚拟DOM比起模板渲染,要多加了一层递归,遍历,计算等。

也就是说,虚拟DOM并不能提高框架的性能,相反因为js计算量的增加,会降低一定的性能。

但我们要注意的是虚拟 DOM 的劣势主要在于 JS 计算的耗时,而 DOM 操作的能耗和 JS 计算的能耗根本不在一个量级。所以当我们有大量的

所以虚拟dom的存在能极大的提高研发效率的同时,还能保证一个很不错的性能。

虚拟DOM解决了问题的关键有两个:

  • 研发体验/研发效率的问题

  • 跨平台的问题

    虚拟DOM本质只是DOM的一层抽象,那么虚拟DOM可以描述的真实DOM,也可以是ios,安卓,小程序等,理论上我们一次编码就可以编译为多套代码。

Diff算法

  • 同层比较,如果层级不同,那么直接跳过diff,
  • 类型相同的节点,才会diff,如果类型不同,直接替换
  • 把key作为唯一标识,减少同一层级的不同比较