Vue.js3.0的优化

一、 源码优化

目的是让代码更易于开发和维护。

1. 更好的代码管理方式:monorepo

  • Vue.js 2.0
  • 源码托管在 src 目录。

  • 所有功能依赖 Vue.js 运行。

  • Vue.js 3.0
  • monorepo 的方式维护,根据功能将不同的模块拆分到 packages 目录下面不同的子目录。monorepo 把这些模块拆分到不同的 package 中,每个 package 有各自的 API、类型定义和测试。

  • 一些 package可以独立于 Vue.js 使用,如果只想使用 Vue.js 3.0 的响应式能力,可以单独依赖这个响应式库而不用去依赖整个 Vue.js ,减小了引用包的体积大小。

2. 有类型的 JavaScript:TypeScript

  • Vue.js 2.0
  • 选用 Flow 做类型检查。对于一些复杂场景类型的检查,支持得并不好。
  • Vue.js 3.0
  • 源码自身采用了 TypeScript 开发。TypeScript 类型语言非常有利于代码的维护,做类型检查。

二、 性能优化

1. 源码体积优化

  • 移除一些冷门的 feature(如 filterinline-template等);

  • 引入 tree-shaking 的技术,减少打包体积。

2. 数据劫持优化

  • Vue.js 1.x 和 Vue.js 2.x
  • 通过 Object.defineProperty 这个 API 去劫持数据的 gettersetter。并不能检测对象属性的添加和删除。
  • Vue.js 3.0
  • 使用了 Proxy API 做数据劫持。对于对象的属性的增加和删除都能检测到。真正访问到的内部对象才会变成响应式 ,而不是无脑递归。

3. 编译优化

  • Vue.js 2.0
  • 数据更新并触发重新渲染的粒度是组件级的。会导致 vnode 的性能跟模版大小正相关,跟动态节点的数量无关,当一些组件的整个模版内只有少量动态节点时,这些遍历都是性能的浪费。

  • patch 阶段耗时相对较多。

  • Vue.js 3.0
  • 编译阶段对静态模板的分析,编译生成了 Block tree

  • 在编译阶段优化编译的结果,来实现运行时 patch 过程的优化。

  • 编译阶段还包含了对 Slot 的编译优化、事件侦听函数的缓存优化,并且在运行时重写了 diff 算法。

三、 语法 API 优化:Composition API

Vue.js 3.0 提供了 Composition API

1. 优化逻辑组织

  • Vue.js 1.x 和 Vue.js 2.x
  • 逻辑关注点是非常分散。
  • Vue.js 3.0
  • Composition API 将某个逻辑关注点相关的代码全都放在一个函数里,逻辑集中。

2. 优化逻辑复用

  • Vue.js 2.0
  • mixins 去复用逻辑。
  • Vue.js 3.0
  • 复用逻辑这个函数为 hook 函数,然后在组件中使用。

3. 引入 RFC:使每个版本改动可控

全称是 Request For Comments,旨在为新功能进入框架提供一个一致且受控的路径。Vue.js 3.0 版本有很多重大的改动,每一条改动都会有对应的 RFC,通过阅读这些 RFC,你可以了解每一个 feature 采用或被废弃掉的前因后果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容