虚拟Dom的解决方式是通过状态生成一个虚拟节点树,然后使用虚拟节点树进行渲染。在渲染之前,会使用新生成的虚拟节点树和上一次生成的虚拟节点树进行对比,只渲染不同的部分。
vue.js的变化侦测,实现了细粒度的绑定来更新视图,当状态发生变化是,在一定程度上知道哪些节点使用了这个状态,就更新哪些节点,根本不需要对比,1.0版本的做法就是这样的。
但是这种方法,每一个绑定都会对应一个watcher来观察状态的变化,会产生内存和依赖追踪的开销。
vue.JS 2.0 采用中等粒度,即一个组件对应一个watcher,组建内部采用虚拟Dom对比渲染。
vue.js之所以能随意调整粒度,关键还是和变化侦测的原因。