Skip to content
On this page

既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?

Vue 的数据劫持是通过 Object.defineProperty 或 Proxy 来实现的。

虚拟 DOM 是用于比较两次渲染之间的虚拟树,找出差异并仅更新必要的部分。从而提高性能,减少直接操作实际 DOM 的次数。(直接操作真实 DOM 是代价是非常昂贵的)

Vue 内部设计原因导致,vue 设计的是每个组件一个 watcher(渲染 watcher),没有采用一个属性对应一个 watcher。

这样会导致大量 watcher 的产生而且浪费内存,如果粒度过低也无法精准检测变化。

所以采用 diff 算法 + 组件级 watcher。

Released under the MIT License.