2021-03-29 10:06:33
Vue 3 与 Vue 2 的核心区别体现在响应式系统、编译器、虚拟 DOM、代码组织方式、类型支持及开发体验等多个层面,具体差异如下:
1. 响应式系统实现机制不同无法检测新增/删除的属性(需配合 Vue.set/Vue.delete);
对数组的变异方法(如 push、pop)需特殊处理;
性能开销较大,尤其在初始化时。
动态检测属性增删,无需额外操作;
支持数组索引修改、长度变更等原生操作;
性能更优,仅在访问属性时触发代理,减少初始化开销。
静态提升(Hoisting):将静态节点提取到渲染函数外,减少重复创建开销;
Patch Flags:标记动态节点,虚拟 DOM 更新时仅比对变化部分;
Tree-shaking 支持:编译时移除未使用的代码,减小打包体积。
动态节点标记:结合 Patch Flags 精准定位变化;
事件缓存:缓存事件处理函数,避免重复创建;
更高效的 Diff 算法:减少不必要的比对操作。
使用 setup 函数集中管理响应式数据、生命周期等;
通过 ref、reactive、computed 等 API 灵活组合逻辑;
支持自定义 Hook(如 useMouse),提升代码复用性。
核心 API 均标注类型定义;
setup 函数与 Composition API 天然兼容类型系统;
官方工具链(如 Volar 插件)优化了类型检查与代码提示。
Vue 3 支持 <Suspense> 组件,可延迟加载异步依赖(如异步组件、数据获取),并显示加载状态。
通过 createRenderer API 扩展渲染目标(如 Canvas、WebGL),支持非 DOM 环境(如移动端、SSR)。
组件支持多根节点(Fragment);
Teleport 允许将组件内容渲染到 DOM 任意位置,简化模态框等场景开发。
v-bind 缩写从 : 扩展为支持动态参数(如 [attrName]);
v-on 缩写从 @ 扩展为支持动态事件(如 [eventName])。
Vue 2 的 slot 和 slot-scope 合并为 v-slot(简写为 #),如 #default。
Vue 3 的 API 标注版本号(如 @vue/runtime-core@3.x),便于未来非破坏性更新。
Vue 3 通过底层优化(响应式、虚拟 DOM)和开发范式升级(Composition API、TypeScript)显著提升了性能与代码可维护性,同时新增特性(如 Suspense、Teleport)扩展了应用场景。尽管需适应语法变化(如插槽、指令),但长期来看,Vue 3 是更现代、高效的框架选择,尤其适合复杂项目开发。