vue3源码采用monorepo 方式进行管理,将模块拆分到package目录中
每个模块是一个单独的包,可以进行单独打包,模块直接也可以相互引用
2.vue3 采用ts开发,增强类型检测,vue2 则采用 flow
3.vue3的性能优化,支持tree-shaking,不使用就不会被打包
4.vue2后期引入RFC,使每个版本改动可控rfcs
内部代码优化
1.vue3劫持数据采用proxy ,vue2劫持采用defineProperty,defineProperty有性能问题和缺陷
defineProperty是将每个属性完整递归,并且给每个属性增加get和set方法,性能不高,会有深度遍历,卡顿的过程
2.vue3中对模块编辑进行了优化,编译时生成了Block tree,可以对子节点的动态节点进行收集,可以减少比较,并且采用
patchFlag 标记动态节点
3.vue3采用compositionApi 进行组织功能,解决反复横跳,优化复用逻辑(mixin带来的数据来源不清晰,命名冲突等)
相比optionsApi类型推断更加方便
4.增加了Fragment,Teleport, SusPense组件
Monorepo介绍
Monorepo 是管理项目代码的一个方式,指在一个项目仓库(repo)中管理多个模块/包(package)
1.一个仓库可维护多个模块,不用到处找仓库
2.方便版本管理和依赖管理,模块直接的引用,调用都非常方便
缺点:仓库体积会变大
vue3项目结构
reactivity: 响应式系统
runtime-core: 与平台乌龟的运行时核心
yarn init -y
npm install yarn -g
因为要实现monorepo,目前只有yarn才支持