响应式系统提升 vue2在初始化的时候,对data中的每个属性使用definepropery调用getter和setter使之变为响应式对象。如果属性值为对象,还会递归调用defineproperty使之变为响应式对象。 vue3使用proxy对象重写响应式。proxy的性能本来比defineproperty好,proxy可以拦截属性的访问、赋值、删除等操作,不需要初始化的时候遍历所有属性,另外有多层属性嵌套的话,只有访问某个属性的时候,才会递归处理下一级的属性。 优势: 可以监听动态新增的属性; 可以监听删除的属性 ; 可以监听数组的索引和 length 属性;
编译优化 优化编译和重写虚拟dom,让首次渲染和更新dom性能有更大的提升 vue2 通过标记静态根节点,优化 diff 算法 vue3 标记和提升所有静态根节点,diff 的时候只比较动态节点内容
Fragments, 模板里面不用创建唯一根节点,可以直接放同级标签和文本内容
静态提升
patch flag, 跳过静态节点,直接对比动态节点
缓存事件处理函数
源码体积的优化 vue3移除了一些不常用的api,例如:inline-template、filter等 使用tree-shaking