- 由普通的js对象来描述DOM对象
- 创建虚拟dom开销比真实dom小很多、
- 真实dom无法跟踪状态,新创建全部DOM
- 虚拟DOM作用
- 维护视图和状态关系
- 复杂视图情况下提升渲染性能
- 跨平台
- 浏览器平台渲染DOM
- 服务端渲染SSR
- 原生应用
- 小程序等
- 虚拟DOM库
- snabbdom
- vue2.x内部使用的是改造的snabbdom
- 通过模块可扩展
- 源码使用TS开发
- 最快的虚拟DOM库之一
- 通过模块扩展功能
- attributes
- props
- dataset
- class
- style
- eventlisteners
- 导入模块
- init中注册模块
- h函数第二个参数处使用模块
- patch
- 把新节点中的变化的内容渲染到真实dom,返回新节点,作为下次处理的旧节点
- 对比新旧VNode是否删除
- 如果不是相同节点,删除之前的内容,重新渲染
- 如果相同,判断新VNode是否有text,如果有并且和OldVnodetext不同,替换
- 判断是否有子节点,对子节点对比
- Diff算法
- 最麻烦查找两棵树上每一个节点的差异
- snbbdom 优化只比较同级节点 减少比较次数
- snabbdom