Vue3对⽐Vue2的变化


  • 性能优化(更快):
    • 使用了Proxy替代 Object.defineProperty 实现响应式。(为什么?defineProperty 需要对属性进行递归重写添加gettersetter 性能差,同时新增属性和删除属性时无法监控变化,需要$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 目录中,解耦后可单独使用。

文章作者: 高红翔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 高红翔 !
  目录