数据状态更新时的差异 diff 及 patch 机制。即当数据发生变化时vue是如何更新视图的。
之前讲到,在对 model 进行操作对时候,会触发对应 Dep 中的 Watcher 对象。Watcher 对象会调用对应的 update 来修改视图。最终是将新产生的 VNode 节点与老 VNode 进行一个 patch 的过程,比对得出「差异」,最终将这些「差异」更新到视图上。
首先Virtual DOM只是一些js对象,需要调用不同平台的API来生成真实的DOM树。
大概流程是这样的,每当数据发生变化,vue就会调用render方法生成VNnode树,然后使用diff算法与旧的dom树比较,这个diff算法是逐层比较的,时间复杂度只有O(n),所以很高效,之后使用patch操作真实dom将差异反映到视图上。