Skip to content
On this page

Vue3 对⽐ Vue2 的变化?

性能优化(更快):

  • 使用了Proxy替代 Object.defineProperty 实现响应式。(为什么?defineProperty 需要对属性进行递归重写添加getter及setter 性能差,同时新增属性和删除属性时无法监控变化,需要$set、$delete 方法。此方法对数组劫持性能差,同时不支持 map 和 set 的数据结构。)

  • 模板编译优化。给动态节点增添 PatchFlag 标记;对静态节点进行静态提升;对事件进行缓存处理等。

  • Diff 算法优化,全量 diff 算法中采用最长递增子序列减少节点的移动。在非全量 diff 算法中只比较动态节点,通过PatchFlag 标记更新动态的部分。

体积优化(更小):

Vue3 移除了不常用的 API,实现了按需引入,减少了打包后体积

  • 移除 inline-template (Vue2 中就不推荐使用)
  • $on、$off、$once (如果有需要可以采用 mitt 库来实现)
  • 删除过滤器 (可以通过计算属性或者方法来实现)
  • $children移除 (可以通过provide,inject方法构建$children)
  • 移除.sync .native)修饰符 (.sync通过 v-model:xxx实现,.native为 Vue3 中的默认行为) 以及不在支持 keycode 作为v-on修饰符(@keyup.13 不在支持)
  • 移除全局 API。Vue.component、Vue.use、Vue.directive (将这些 api 挂载到实例上)
  • 通过构建工具 Tree-shaking 机制实现按需引入,减少用户打包后体积。

支持自定义渲染器:

用户可以自定义渲染 API 达到跨平台的目的。扩展能力更强,无需改造 Vue 源码。

TypeScript 支持:

Vue3 源码采用 Typescript 来进行重写 , 对 Ts 的支持更加友好。

源码结构变化:

Vue3 源码采用 monorepo 方式进行管理,将模块拆分到 package 目录中,解耦后可单独使用。

Released under the MIT License.