vue2 和 vue3 的核心区别

vue2 和 vue3 的核心区别

Vue3 是 Vue2 的重构升级版本,基于全新的架构设计,在性能、开发体验、语法规范、工程化等方面都有质的提升,以下是两者最核心的区别:

一、核心架构与设计理念

维度 Vue2 Vue3
源码实现 基于 Options API(选项式API) 设计,使用 Flow 进行类型检查 基于 Composition API(组合式API) 设计,完全使用 TypeScript 重构,架构更解耦
响应式原理 基于 Object.defineProperty() 实现 ✅ 缺点:无法监听对象新增/删除属性、无法监听数组下标修改 基于 ES6 Proxy 实现 ✅ 优点:可监听对象/数组的任意增删改查,性能更高,无边界限制
体积 全量打包体积较大,无法做到按需裁剪 支持 Tree-shaking(摇树优化),未使用的API会被剔除,打包体积更小(最小约10KB)

二、核心API:写法与组织方式

1. Vue2:选项式 API (Options API)

  • 写法:数据、方法、计算属性、生命周期分模块编写
  • 缺点:代码逻辑分散,大型项目中维护复杂功能时,需要反复上下跳转代码
  • 示例:
javascript 复制代码
export default {
  data() {
    return { count: 0 };
  },
  methods: {
    add() {
      this.count++;
    },
  },
  computed: {
    double() {
      return this.count * 2;
    },
  },
  mounted() {
    /* ... */
  },
};

2. Vue3:组合式 API (Composition API)

  • 写法:按业务逻辑组织代码,相关功能聚合在一起
  • 优点:逻辑复用更方便、代码可读性和可维护性大幅提升,完美支持 TS
  • 推荐写法:<script setup> 语法糖(简化代码,无需声明导出)
  • 示例:
vue 复制代码
<script setup>
import { ref, computed, onMounted } from "vue";
const count = ref(0);
const add = () => count.value++;
const double = computed(() => count * 2);
onMounted(() => {
  /* ... */
});
</script>

三、性能优化

  1. 渲染性能
    • Vue3 重写了虚拟 DOM 和 Diff 算法,采用静态提升、补丁标记、事件缓存 等优化,渲染速度比 Vue2 快 50%~100%
  2. 内存占用
    • 响应式系统更轻量化,内存占用降低约 30%
  3. 编译优化
    • 编译阶段会区分静态节点和动态节点,只对动态节点做 Diff 比对,大幅减少渲染开销

四、生命周期函数

功能 Vue2 选项式 Vue3 组合式(setup)
创建前 beforeCreate 不使用(直接用setup)
创建后 created 不使用(直接用setup)
挂载前 beforeMount onBeforeMount
挂载完成 mounted onMounted
更新前 beforeUpdate onBeforeUpdate
更新完成 updated onUpdated
销毁前 beforeDestroy onBeforeUnmount
销毁完成 destroyed onUnmounted

核心变化:Vue3 移除了 beforeCreate/created,用 setup 替代;销毁相关生命周期改名(destroy → unmount)

五、数据定义方式

1. Vue2

  • 统一在 data() 中定义响应式数据,通过 this 访问
  • 对象/数组的响应式存在缺陷

2. Vue3

  • 基础类型用 ref,对象/数组用 reactive
  • 新增 toRefscomputedwatch 等组合式响应式API
  • 无响应式边界问题,所有修改都能被监听

六、TypeScript 支持

  • Vue2:天生对 TS 支持不友好,需要借助装饰器,类型推导不完善
  • Vue3原生完美支持 TS,所有API都是TS编写,类型推导自动完成,无需额外配置

七、组件与功能增强

  1. Fragment(多根节点)
    • Vue2:组件必须有唯一根节点
    • Vue3:组件支持多个根节点,无需包裹一层无用div
  2. Teleport(传送门)
    • 新特性:可将组件渲染到指定DOM节点(如弹窗、提示框)
  3. Suspense(异步组件)
    • 新特性:支持异步组件加载中展示loading状态
  4. 自定义指令:API 统一化,更简洁易懂

八、全局API与配置

  • Vue2:挂载在 Vue 构造函数上,全局污染

    javascript 复制代码
    Vue.prototype.$http = axios;
    Vue.component();
  • Vue3:使用 createApp 创建独立实例,避免全局污染

    javascript 复制代码
    import { createApp } from "vue";
    const app = createApp(App);
    app.config.globalProperties.$http = axios;
    app.component();

九、生态工具

工具 Vue2 Vue3
构建工具 Vue CLI Vite(极速启动,热更新更快)
路由 vue-router@3 vue-router@4
状态管理 Vuex@3 Pinia(官方推荐,更简洁、支持TS)
UI库 ElementUI、ViewUI Element Plus、Ant Design Vue、Vuetify 3

总结

  1. 核心差异:Vue2 是选项式API + 旧响应式,Vue3 是组合式API + Proxy 响应式
  2. 优势:Vue3 体积更小、性能更强、TS 支持更好、大型项目维护更简单
  3. 选择建议:新项目直接用 Vue3 + Vite + Pinia;老项目可逐步迁移到 Vue3
相关推荐
平头哥技术团队8 小时前
Day 16 | 用 ul、ol、li 一个标签,把散资料收成有序的技能清单页
开发语言·前端·html·html5
平头哥技术团队1 天前
Day 13 | 调 line-height 和 margin:三处间距让名片页脱离模板感
开发语言·前端·javascript·学习·html5
大模型码小白5 天前
数据可视化:AI处理多维数据的HTML5可视化方案
大数据·前端·javascript·人工智能·机器学习·信息可视化·html5
小江的记录本7 天前
【CSS】CSS 核心:盒模型、BFC/IFC、Flex/Grid 布局、响应式布局、移动端适配(附《思维导图》)
前端·css·面试·前端框架·tensorflow·html5·xss
我命由我123457 天前
JS Mock(Mock 拦截请求的前提、Mock 使用、关闭 Mock)
开发语言·前端·javascript·前端框架·html·html5·js
小江的记录本7 天前
【HTML】HTML5 新特性、语义化标签、浏览器渲染流程(附《思维导图》)
前端·css·面试·前端框架·html·css3·html5
ly768915 天前
HTML5 从入门到工程实践:语义化、表单、多媒体、性能与项目规范详解
前端·html·html5
WL_arm16 天前
Vibe Coding(氛围编程)入门
javascript·css·人工智能·html5
SendTomo19 天前
send.wang(私传网)基于网页P2P直连传输大文件的优势
javascript·网络·webrtc·html5·p2p
二级小助手20 天前
二级Web前端选择题高频真题20道与考场避坑笔记
javascript·css3·html5·web前端·计算机二级·二级web·web真题