Vue3
vue3 相较 vue2 做了哪些优化?
性能提升
更快的渲染速度
:Vue 3 在初始化、更新和销毁组件方面的性能都有显著提升,得益于虚拟 DOM 的优化和编译时性能增强。更小的包体积
:Vue 3 通过 Tree Shaking 进一步减小了包体积,使得未使用的功能在打包时可以被移除。编译时优化
:模板编译器进行了改进,可以生成更高效的渲染函数,并支持静态提升和预编译等优化手段。
Composition API
更好的代码组织
:Composition API 提供了一种基于函数的代码组织方式,使得逻辑复用和代码可读性更强。更好的类型支持
:Composition API 使得 TypeScript 类型推断更加自然和强大
新的响应式系统
- vue2 采用的是 object.defineProperty。在一些属性进行操作时,使用这种返方法无法拦截,包括为对象添加没有的新属性,或删除某一个属性,以数组下标的形式更改数组,ViewModel 是监听不到的,需要调用 vue.$set()方法再去更改响应式数据。
- vue3 采用 ES6 提出的 proxy 代理。它相当于内置了 set、delete 这些执行器,代理的是整个对象,而非是对象的属性,对于数组的话,在 vue3 内部都重写了数组的方法。
Diff 算法优化
- Vue 2 使用的是基于
双端比较
(即比较新旧两棵树的同一位置,直到发现有差异的位置)的虚拟 DOM diff 算法,虽然简单直观,但在处理复杂和大规模节点变更时,性能不如 Vue 3 优秀。 - Vue 3 采用了基于
单端比较和 LIS
(基于位运算,在首尾进行标记,再从中间比较,通过位运算来减少判断次数)的优化算法,显著提升了 diff 过程中的性能和效率,尤其是在处理大规模和复杂的节点变更时表现更佳。同时,通过静态提升和 Block Tree 等编译时优化,进一步减少了不必要的对比和 DOM 操作。