vue diff算法
1. 概览图
2. isSameNode
function sameVnode (a, b) {
return (
// key值
a.key === b.key &&
// 标签名
a.tag === b.tag &&
// 是否为注释节点
a.isComment === b.isComment &&
// 是否都定义了data,data包含一些具体信息,例如onclick , style
isDef(a.data) === isDef(b.data) &&
// 当标签是<input>的时候,type必须相同
sameInputType(a, b)
)
}
3. O(n³) 到 O(n) 的转变
假设树的结点树为n
- 传统 diff 算法 O(n³):对两棵树的结点进行两两比较的开销为 O(n²);而遍历完旧树后,没找到新树中的某个结点,就需要创建一个新结点(在旧中找到合适位置并插入一个新结点)的开销为O(n),所以传统diff算法的时间复杂度为O(n³)
- vue diff 算法 O(n):同层比较,每个结点只操作一次。
diff算法详解
还没有评论,来说两句吧...