什么是虚拟dom
html节点由许多的元素节点组成,如果我们把所有的元素节点都通过对象形式表达出来,在通过父子关系的数据结构形成一个庞大的数据对象,那么这个数据对象就是虚拟dom。 虚拟dom节点一般由tag、sel(选择器)、props、text、child、key组成。text和child只能有一个
snabbdom 虚拟dom的对比更新操作
snabbdom 是虚拟DOM的一种简单的实现,并且在Vue中实现的虚拟DOM是借鉴了 snabbdom.js 的,因此我们这边首先来学习该库。
- 主要讲:vnode、patch、h函数、patchVnode函数、key
- patch函数用于创建虚拟节点或者更新节点
- h函数 用于创建节点
- patchVnode函数用于对比节点数据的变化,来决定是否增删改查排序节点
vue中的diff算法
diff算法就是对patchVnode函数的优化,由于现实情况下节点非常多,如果遍历的话时间复杂对会非常的大,所以diff算采用同级比较来节省时间复杂度,这样有多少个节点就遍历多少次就行了。 父<=>父 子<=>子 孙子<=>孙子
- 如果tag、sel、key相同则表示相同的节点
- 相同节点对比text和child(双指针法一次性比较四个位置,如有不对则排序或者增删)
- 如果相同则不需要更新了