React虚拟DOM和diff算法

441 阅读2分钟

1. 虚拟DOM是什么

虚拟DOM是一个能代表真实DOM的js对象

2. 虚拟DOM的优点

1. 减少DOM操作

  • 虚拟DOM可以将多次DOM操作合并为一次操作
  • 使用Diff算法减少不必要的DOM操作

2. 跨平台

虚拟DOM实际上是j s对象,可以应用于小程序,移动端,Web端等多平台

3.diff算法

1. diff算法用来做什么的

diff算法是用来对比两个虚拟DOM树,找出哪些节点需要更新

2. diff算法比较规则

从头节点开始往下层遍历节点

组件节点

  • 如果是组件节点,先看组件类型
  • 类型不同直接替换(删除旧的)
  • 类型相同则只需要更新属性
  • 然后深入子元素做递归操作

原生标签

  • 如果是原生标签节点,则看标签名
  • 标签名不同直接替换,相同则只更新属性
  • 然后深入子元素做递归

4. 使用key属性优化diff算法

通常在一个List中或者一个拥有相同节点的容器内,推荐为每个元素添加一个唯一的key,用来标志当前元素

我们来看如下一个示例

通过如上示例可以发现一个问题,我们仅仅是删除了一个元素,其中第二步的对比本来可以直接跳过,直接删除掉文本内容为Hello的span标签即可,但是在这里,diff算法都做了一步。这是因为diff算法默认是以下标来识别元素的,但是每当有元素增加或者删除,下标就会发生变化,这时候再次对比的时候,之前的元素可能就换了位置,就会多进行不必要的一些操作,使用key就可以唯一的标志一个节点,提高diff效率