1、模板中每个指令/数据绑定都有一个对应的watcher对象,在计算过程中它把属性记录为依赖(touched)。之后当依赖的 setter 被调用时,会触发 watcher 重新计算 ,也就会导致它的关联指令更新 DOM。
2、vue内部有user watchers 和 directive watchers
3、Vue.js 默认异步更新 DOM。每当观察到数据变化时,Vue 就开始一个队列,将同一事件循环内所有的数据变化缓存起来。如果一个 watcher 被多次触发,只会推入一次到队列中。等到下一次事件循环,Vue 将清空队列,只进行必要的 DOM 更新。在内部异步队列优先使用MutationObserver,如果不支持则使用setTimeout(fn, 0)。