key
key是给每一个 vnode 的唯一id,是diff的一种优化策略,可以根据key,更准确, 更快的找到对应的 vnode 节点
原理
- 比较只会在同层级进行, 不会跨层级比较
- 在diff比较的过程中,循环从两边向中间比较
diff 算法中,当新旧节点的首尾节点不一样时,会进行四次对比,分别是
- 新前与旧前
- 新后与旧后
- 新后与旧前
- 新前与旧后
如果都不一样,就会进行全量对比, 如果有一样的,就会进行移动操作,如果新前与旧后一样,就会进行移动操作,移动到旧后的后面
当数据发生改变时,set方法会调用Dep.notify通知所有订阅者Watcher,订阅者就会调用patch给真实的DOM打补丁,更新相应的视图
设置key值一定能提高diff效率吗?
不一定