1、性能优势:
1、virtual DOM 完全重写,mounting & patching 提速 100%;
2、更多编译时 (compile-time)提醒以减少 runtime 开销;
3、基于 Proxy 观察者机制以满足全语言覆盖以及更好的性能;
4、放弃 Object.defineProperty ,使用更快的原生 Proxy;
5、组件实例初始化速度提高 100%;
6、提速一倍/内存使用降低一半;
2、生命周期对比:
beforeCreate ===>setup()
created =======>setup()
beforeMount ===> onBeforeMount
mounted=======> onMounted
beforeUpdate ===> onBeforeUpdate
updated =======> onUpdated
beforeUnmount ==>onBeforeUnmount
unmounted=====> onUnmounted
3、双向数据绑定对比:
Object.defineProperty只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。Vue里,是通过递归以及遍历data对象来实现对数据的监控的,如果属性值也是对象那么需要深度遍历,显然如果能劫持一个完整的对象,不管是对操作性还是性能都会有一个很大的提升。
4、依赖注入:
vue2.0可以说是跟props的传值差不多
但是vue3.0需要在父组件中将数据用provide导出,后代组件中接收外城传递的数据,用inject接收父组件传递给后代组件接收到的数据。
这里需要注意的是,后代组件中如果需要修改数据事,那么这时需要做到谁的数据谁修改。
5、mixins语法:
在vue2中一些可以服用的逻辑可以使用mixins封装,但是需要考虑到逻辑代码冲突的问题,vue3.0中组合API很好的解决了这个问题,就不推荐使用mixins语法了。