Vue 2 vs Vue 3
1. 响应式系统
Vue 2 基于 Object.defineProperty,Vue 3 改用 Proxy,因此能够监听属性新增、删除和数组下标变化,并支持惰性代理。具体实现原理与完整对比详见 Vue 响应式原理。
2. API 风格
Vue 2:Options API
- 按选项分类:data、methods、computed、watch、生命周期
- 问题:逻辑分散,一个功能的相关代码散落在不同选项中
- 复用:用 Mixin(容易出现命名冲突、数据来源不清晰)
Vue 3:Composition API
- 按逻辑功能聚合代码
- 复用:抽取为 Composable 函数(Hooks),更清晰
- 新增
<script setup>语法糖,代码更简洁
3. 性能提升
打包体积
- Vue 2:全量打包,无法 Tree-shaking
- Vue 3:按需引入,体积更小(Vue 3 完整版约 20KB+)
渲染性能
内存占用
- Vue 3 重新设计,相同功能下内存占用更少
4. 新特性
Fragment(多根节点)
Teleport(传送门)
把组件渲染到 body 下,不受父级 overflow/z-index 影响。
Suspense(异步等待)
CSS v-bind
5. 生命周期
对比表
变化
- setup() 在 beforeCreate 之前执行
- 新增:onRenderTracked(跟踪)、onRenderTriggered(触发)
- 废弃:componentWillMount、componentWillReceiveProps、componentWillUpdate(UNSAFE)
6. 组件
v-model
插槽
defineExpose
7. TypeScript 支持
Vue 2
- 最初没有考虑 TS,写类型定义很痛苦
- 需要 vue-class-component 等装饰器库
- 推导能力弱
Vue 3
- 完全用 TS 重写
- 天然类型推导
- Composition API + TypeScript 完美配合
8. 构建工具
Vue 2
- Webpack
- 启动慢,热更新慢
Vue 3
- Vite
- ES Module + 浏览器的原生 ESM
- 秒级启动、热更新极快

