diff 算法概述
diff即对比,是一个广泛的概念,如linux diff、git diff
两个JS对象也可以做diff
两颗树做diff,如vdom diff
树diff 时间负责度是o(n^3)
第一,遍历tree1;第二,遍历tree2
第三,排序
1000个节点,要计算 1亿次,算法不可用
优化时间复杂度到o(n)
之比较同一级,不跨级比较
tag不相同,则直接删掉重建,不再深度比较
tag和key两者都相同,则认为是相同节点,不再深度比较
patchVnode()
diff算法总结
patchVnode 逻辑
addVnodes、removeVnodes (使用情况)
updateChildren(key的重要性)
不使用key VS 使用key
不使用key:如果节点顺序变了,节点更新时需要全部删掉,
使用key:可以算出哪个key是相同的,可以直接移动
vdom和diff总结
updateChildren的过程不要深究,要知道大概过程
vdom核心概念:
h(传入的什么)
vnode(结构)
patch(作用、参数)
diff(过程、性能优化做了哪些改变、)
key(key的重要性)
vdom 存在的价值更加重要:基于数据驱动视图,控制dom操作