Vue 深入学习 2—虚拟 DOM 和 Diff 算法

1、snabbdom 是什么?
snabbdom 是“速度"的意思,源码只有 200 行,使用 TS 写的,让东西变得模块化。
2、snabbdom 的 h 函数如何工作?
h 函数用于产生虚拟节点,同时也可以嵌套使用,得到虚拟 DOM 树。
3、什么是虚拟 DOM?
实际上它对真实 DOM 的抽象结果,是 JS 和真实 DOM 之间的一个缓存,原生 DOM 运行慢,将 DOM 放在 JS 层,提高渲染性能。
3.1、创建一个虚拟 DOM
复制代码
3.2、patch 函数源码流程图

复制代码
4、diff 算法原理
只对比父节点相同的新旧子节点(Vnode),时间复杂度 O(n)
在比较过程中,循环从两边向中间合拢。
4.1、diff 是发生在虚拟 DOM 上的,用来计算两个虚拟 DOM 的差异,并重新熏染。
复制代码
4.3、diff 算法新旧节点对比的过程?

①先借助 key 值找到
不需要移动
的相同节点。②再找到相同的节点,进行
移动
。③找不到的,才会
新建删除
节点,保底处理。
4.3、Diff 值得注意的地方:
Diff 算法更改前后是同一个 DOM 节点
选择器、key 相同则判断为同一个节点。
只进行同层比较,不会跨层比较。
版权声明: 本文为 InfoQ 作者【魁首】的原创文章。
原文链接:【http://xie.infoq.cn/article/20598c0140d4ac49f0539e291】。文章转载请联系作者。
评论