1、Vue3.0性能提升主要是通过哪几方面体现的?
1.响应式系统提升
vue2在初始化的时候,对data中的每个属性使用definepropery调用getter和setter使之变为响应式对象。如果属性值为对象,还会递归调用defineproperty使之变为响应式对象。
vue3使用proxy对象重写响应式。proxy的性能本来比defineproperty好,proxy可以拦截属性的访问、赋值、删除等操作,不需要初始化的时候遍历所有属性,另外有多层属性嵌套的话,只有访问某个属性的时候,才会递归处理下一级的属性。
优势:
可以监听动态新增的属性;
可以监听删除的属性;
可以监听数组的索引和length属性;
2.编译优化
优化编译和重写虚拟dom,让首次渲染和更新dom性能有更大的提升vue2通过标记静态根节点,优化diff算法vue3标记和提升所有静态根节点,diff的时候只比较动态节点内容
Fragments,模板里面不用创建唯一根节点,可以直接放同级标签和文本内容
静态提升
patchflag,跳过静态节点,直接对比动态节点,缓存事件处理函数
3.源码体积的优化
vue3移除了一些不常用的api,例如:inline-template、filter等使用tree-shaking
2.CompositionApi与Vue2.x使用的OptionsApi有什么区别?
OptionsApi
包含一个描述组件选项(data、methods、props等)的对象options;
API开发复杂组件,同一个功能逻辑的代码被拆分到不同选项;
使用mixin重用公用代码,也有问题:命名冲突,数据来源不清晰;