催学社 Vue3源码实战课

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中递归响应式,这样的好处是真正访问到内部对象才会变成响应式,而不是无脑递归,这样无疑也在很大程度提升性能。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容