VUE更好的优化方式
更好的代码管理方式:monorepo代码管理
相对于vuejs 2.x的源码组织方式,monorepo吧这些模块拆分出来到不同package中
每个package有各自的API,类型定义和测试
这样是模块拆分更细化,职责划分更加明确,模块之间的依赖关系也更加明确
开发人员也更容易阅读理解和更改所有模块的源码,提高代码的可维护性
package(比如reactivity响应式库)可以独立于vuejs使用
https://pan.baidu.com/s/1XfMc8xpExBJK2e2clMng7w?pwd=hcz9
提取码: hcz9
性能优化 vue3.0
移除一些冷门feature
引入tree-shaking的技术(通过编译阶段的静态分析,找到没有引入的模块并打上标记,没有引入就不会打包)
数据劫持优化
数据是响应式的,实现DOM功能,必须劫持数据的访问和更新
当数据改变后,为了自动更新DOM,那么就必须劫持数据的更新,也就是说当数据发生改变后自动执行一些代码更新DOM
因为在渲染DOM的时候访问了数据,我们就可以对他进行访问劫持。这样在内部建立依赖关系,也就知道数据对应DOM是什么了
vue2.js通过Object.defineProperty() 这个API劫持数据的getter和setter
他必须知道拦截的key是什么,并不能检测添加和删除
Object.defineProperty(data,'a',{get(){
// track 跟踪},set(){
// trigger 触发}
})
嵌套层级比较深的对象,要把每一层对象都变成响应式的
vue3 使用Proxy API 做数据劫持的他的内部
Observed = new Proxy(data,{get(){
// track 跟踪},set(){
// trigger 触发}
})
注意的是,proxyAPI并不能监听到内部深层次的对象变化
因此vue3处理方式在getter中递归响应式,这样的好处是真正访问到内部对象才会变成响应式,而不是无脑递归,这样无疑也在很大程度提升性能。