Vue中的唯一key
Vue 中 key 的作用是:key 是为 Vue 中 vnode 的唯一标记,通过这个 key,我们的 diff 操作可以更准确、更快速。利用唯一key来获取对应节点,比遍历更快。
Vue中的virtual DOM
virtual DOM是将真实的DOM的数据抽取出来,以对象的形式模拟树形结构,最终经过一系列操作将其映射到真正的环境中。
操作真实DOM元素开销很大,容易引起整个DOM树的重绘和回流,在Vue的底层实现上,Vue将模板编译成虚拟DOM渲染函数,再转换成虚拟DOM,虚拟DOM节点和原真实的DOM节点进行比较(比较只会在同级进行, 不会跨层级比较),只需要将二者不一样的地方渲染上去就行了,实现了只更新我们修改的那一小块dom而不要更新整个dom。
diff算法
Vue的diff算法是基于snabbdom改造过来的,Vue中diff算法过程就是调用名为patch函数,仅在同级的vnode间做diff,递归地进行同级vnode的diff,最终实现整个DOM树的更新。
diff 算法包括几个步骤:
- 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中
- 当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异
新的树和旧的树进行比较,记录两棵树差异 - 把所记录的差异应用到所构建的真正的DOM树上,视图就更新了