1.源码优化
-
(1)源码的优化主要体现在使用menorepo和TypeScript管理和开发源码,提升了自身代码的可维护性
-
(2)相对于Vue2的源码组织方式,menorepo把这些模块拆分到不同的package中,每个package有各自的API、类型定义和测试,使得模块拆分更细化,职责划分更明确,模块之间的依赖关系也更加明确,开发人员更容易阅读、理解和更改所有模块源码,提高代码的可维护性
-
(3)package是可以独立于vue.js使用,这一点是vue2做不到的,可以单独依赖这个响应式库而不用去依赖整个vue.js,减少了引用包的体积大小
-
(4)使用了TypeScript有类型语言开发
2.性能优化
-
(1)源码体积上:引入了tree-shaking的技术,通过编译阶段的静态分析,找到没有被引入的模块并标记,如果你在项目中没有引入Transition、keepAlive等组件,那么它们对应的代码就不会打包,减小了代码体积
3.数据劫持优化
-
数据是响应式的,必须劫持数据的访问和更新,使用了Proxy对数据进行劫持,Proxy不能监听到内部深层次的对象变化,因此Vue3的处理方式是在getter中去递归响应式,这样的好处是真正访问到的内部对象才会变成响应式,而不是无脑递归
4.编译优化
-
Vue2的数据更新并触发重新渲染的粒度是组件级别的,而Vue3通过编译阶段对静态模板的分析,编译生成了Block Tree
-
Block tree是一个将模板基于动态结点指令切割的嵌套区块,每个区块内部的结点结构是固定的,每个区块只需要以一个数组来追踪自身包含的动态结点
-
借助Block tree , vue3将vnode更新性能由与模板整体大小相关提升为与动态内容的数量相关
-
在编译阶段还包含了对slot的编译优化、时间侦听函数的缓存优化,并在运行时重写了diff算法
5.优化逻辑组织
-
Composition API:将某个逻辑关注点相关的代码放在一个函数里,当需要修改一个功能时,就不需要在文件中跳来跳去
6.优化逻辑复用
-
Vue2中的mixins都可以定义自己的props,data,它们之间是无感的,所以很容易定义相同的变量,导致命名冲突。
-
对组件而言,如果模板中使用不在当前组件中定义的变量,那么就会不太容易知道这些变量在哪定义,导致数据来源不清晰,Vue3.0的composition API很好的解决的了mixins的这个两个问题
-
除了在逻辑复用方面,composition API有更好的类型支持
-
因为它们都是一些函数,在调用函数时,类型也就被推到出来了,不像Options API所有的东西都使用this
-
composition API 对tree-shaking友好,代码更加容易压缩
7.RFC(Request For Comments)
-
旨在为新功能进入框架提供一个一致且受控的路径