vue2 vue3 比较
所属分类 vue
浏览量 71
1. 性能提升
Vue3 重写虚拟DOM ,性能更好
对比:
Vue3 基于 Proxy ,Vue2 基于 Object.defineProperty
Object.defineProperty:
const data = {};
Object.defineProperty(data, 'property1', {
value: 42,
writable: false
});
Proxy:
const data = {a: 1};
const proxy = new Proxy(data, {
get(target, prop) {
return target[prop];
},
set(target, prop, value) {
target[prop] = value;
console.log('property set');
return true;
}
});
为何 Proxy 的性能更好?
响应性机制
Object.defineProperty 需要递归地遍历一个对象的所有属性并为其定义 getter 和 setter,这在大型对象上可能非常缓慢。
相反,Proxy 可以拦截整个对象,而无需逐个处理属性。
数组问题
Vue2 为了检测到数组的变化, 必须覆盖数组的原型方法(如 push、pop 等),这是一个复杂且可能产生错误的过程。
Vue3 可以更简单、更直接地拦截数组的变化。
精细的变更检测
Vue3 可以更精确地检测对象的变化。
例如,添加或删除属性时,Proxy 可以立即捕获这些变化,而 Object.defineProperty 则无法捕获这类变化。
未来的优化
由于 Proxy 是 ECMAScript 的一个标准特性,未来的 JavaScript 引擎可能会为其提供更多的优化,从而进一步提高性能。
2. 组合式 API
Vue3 引入了组合式 API,这是一套全新的、可选的、基于函数的 API。
Vue2:
export default {
data() {
return {
count: 0
}
},
methods: {
increment() {
this.count++;
}
}
}
Vue3:
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
function increment() {
count.value++;
}
return {
count,
increment
};
}
}
3. 按需 Tree Shaking
Vue3 大部分核心功能都是基于 Tree shaking 的,只有使用的部分才会被打包进最终的代码。
打出来的包更小
4. 更多的内置组件
Vue3 提供了更多的内置组件,如 和
Loading...
This will be moved to body tag
5. 更好的 TypeScript 支持
Vue3 源代码完全是用 TypeScript 编写的,这意味着它提供了更好的 TS 支持
6. 新的自定义事件 API
Vue3 提供了一个更好、更简洁的 API 来处理组件的自定义事件
Vue 2:
this.$emit('event-name', payload);
Vue 3:
const emit = ctx.emit;
emit('event-name', payload);
7. 多个根节点
Vue3 中,单文件组件可以有多个根节点
Vue2:
Item 1
Item 2
Vue3:
Item 1
Item 2
8. 更好的默认插槽 API ,更简洁,更直观。
9. 移除了过滤器
Vue3 完全移除了过滤器,推荐使用计算属性或方法代替。
Vue2:
{{ message | capitalize }}
Vue3:
{{ capitalize(message) }}
10. Portal、Fragments、Suspense 等新特性
Vue3 还引入了一些其他的新特性和改进。
Fragments: 允许模板有多个根节点。
Suspense: 为异步组件提供了内置支持。
上一篇
下一篇
若依 vue3 开发环境 前后端搭建记录
数据校验 Java Bean Validation 2.0(JSR380) 实例
vue3 vite prod 和 stage 区别
vue3 核心技术
vue3 vite 和 Vue-CLI
RuoYi-Vue3 登录 前端代码笔记