vue3.0完全兼容vue2.x版本
VUE3.0六大亮点:
1、性能比2.x快1.2~2倍
2、按需编译,体积比2.x更小
3、新出组合API(类似React Hooks)
4、更好支持TypeScript
5、暴露了自定义渲染API
6、更先进的组件
1、新的创建方式
3.0新增了Vite的方式创建项目,使用npm init vite-app <项目名> 即可,不过得预先装vue3.0。这种方式比vue-cli脚手架更快更轻量。Vite原理是利用ES6的import发送请求去加载文件的特性
2、性能优化四点
①diff算法优化
2.0的diff算法在更新时,会将虚拟DOM重新渲染,而3.0在创建虚拟DOM的时候会根据DOM中的内容会不会发生变化来添加静态标记(PathFlags),只有有静态标记才会进行重新渲染,这样会增强性能。
②hoistStatic静态提升
2.x中不论元素是否更新都会创建,3.0中只会创建变化的,而不变的会使用旧有的元素。
③事件侦听缓存
对于click之类的事件在2.x中每次执行都会去追踪变化,3.0中添加了事件侦听缓存,使相同事件缓存起来,增快运行速度。
vue-next-template-explorer.netlify.app //vue3.0源码对照地址
④ssr渲染
3、组合API-setup
在3.0中与data同级增加了setup,setup函数是 Composition API(组合API)的入口,函数生命周期在beforeCreate生命周期之前执行。所以函数内无法使用this,data和methods等。
在setup中可以将变量函数方法生命周期都写在内。这样可以使同一功能函数的所有代码都在一个函数体内,项目结构更清晰更易维护。
在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用。但本质是将return暴露出去的数据注入到data中,将方法注入到methods中。
setup中的内容必须是同步的,要使用异步必须自定义customRef函数。
4、响应式原理的区别
vue2的响应式是defineProperty实现的,在defineProperty通过set设置数据,get监听数据,然后反馈到watch引起页面响应渲染。
vue3响应式数据是通过ES6的Proxy来实现的,将数据包装成proxy对象,对象里set设置数据,get监听数据。