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
相关推荐
yuanlaile21 小时前
想做智能电视App?用H5 + 跨平台也能快速上线
html5·cordova·智能电视·ionic·tv应用开发
We་ct1 天前
HTML5 原生拖拽 API 基础原理与核心机制
前端·javascript·html·api·html5·浏览器·拖拽
zimoyin1 天前
Web Components 介绍与推荐三款框架
web3·html5
方安乐1 天前
网页设计:自动适配浏览器深色/浅色模式
前端·html5
大黄说说3 天前
HTML5语义化标签:从div到article与section的进化之路
前端·html·html5
布局呆星3 天前
Vue3 笔记:过渡动画与自定义指令
javascript·css·vue.js·python·es6·html5
码云数智-园园3 天前
告别Flash:HTML5音视频播放器实战指南
前端·音视频·html5
kyriewen114 天前
项目做了一半想重写?这套前端架构让你少走3年弯路
前端·javascript·chrome·架构·ecmascript·html5
|晴 天|4 天前
从零打造现代化个人博客:Vue 3 + TypeScript + Element Plus 完整实战
javascript·css·chrome·typescript·html5·webstorm