vue中创建虚拟DOM需要引入Snabdom库
什么是虚拟DOM
在vue中使用的是MVVM数据双向绑定模式,这样由于数据的变更视图实时更新,会导致大量的操作DOM节点,为了优化操作,使用对象的形式模拟真实的DOM节点,以减少对真实DOM的操作。对象中包含三个属性:tag、props、children
虚拟DOM的优点
虚拟DOM会比较两个DOM树中的不同,只渲染发生改变的节点
diff算法
在vue中只会比较同一层次的节点,不会跨层比较,这样就减少了深度遍历dom树所花费的时间
创建vnode
vnode函数返回一个对象,当执行h函数之后会生成对应的vnode对象,保存在对应变量里
patch函数
在首次页面渲染的时候执行一次patch函数,将vnode放入一个空的容器中
当有新的vnode需要替换时,就用patch函数替换旧的vnode
- 当旧的vnode不存在时,先创建一个空的容器
- 判断新旧的标签名和key是否一致,若一致就执行pathchVnode,若不一致,创建一个新的DOM元素并插入,最后删除旧的vonde
- patchVnode,把旧的vnode元素赋值给新的Vnode的元素
- 判断新旧vnode的孩子是否相同,不同就更新。