Skip to content

key

key是给每一个 vnode 的唯一id,是diff的一种优化策略,可以根据key,更准确, 更快的找到对应的 vnode 节点

原理

  • 比较只会在同层级进行, 不会跨层级比较
  • 在diff比较的过程中,循环从两边向中间比较

diff 算法中,当新旧节点的首尾节点不一样时,会进行四次对比,分别是

  • 新前与旧前
  • 新后与旧后
  • 新后与旧前
  • 新前与旧后

如果都不一样,就会进行全量对比, 如果有一样的,就会进行移动操作,如果新前与旧后一样,就会进行移动操作,移动到旧后的后面

当数据发生改变时,set方法会调用Dep.notify通知所有订阅者Watcher,订阅者就会调用patch给真实的DOM打补丁,更新相应的视图

设置key值一定能提高diff效率吗?

不一定