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效率