为什么需要虚拟DOM

Vue为什么需要虚拟DOM?

1.1 基本概念

基本上所有框架都引入了虚拟 dom 来对真实 dom 进行抽象,也就是现在大家所熟知的 VNodeVDOM

virtual dom 就是用 js 对象来描述真实 dom,是对真实 dom 的抽象,由于直接操作 dom 性能低但是 js 层的操作效率高,可以将 dom 操作转化成对象操作,最终通过 diff 算法比对差异进行更新 dom(减少了对真实 dom 的操作) 虚拟 dom 不依赖真实平台环境从而也可以实现跨平台

1.2 Vue为什么使用虚拟 DOM?

1.2 VDOM 时如何生成的?

  • 在 vue 中我们常常会为组件编写模板-template
  • 这个模板会被编译器编译为渲染函数-render
  • 在接下来的挂载过程中中调用 render 函数,返回的对象就是虚拟 dom
  • 会在后续的 patch 过程中进一步转化为真实 dom

1.3 VDOM 如何做 diff 的?

  • 挂载过程结束后,会记录第一次生成的 VDOM-oldVnode
  • 当响应式数据发生变化后,将会引起组件重新 render,此时就会生成新的 VDOM-newVnode
  • 使用 oldVnode 与 newVnode 做 diff 操作,将更改的部分应用到真实 dom 上,从而转换为最小量的 dom 操作,高效更新视图

1.4 虚拟 DOM 的解析过程是怎么样的?