- 区分静动态节点,只遍历动态
2.0在虚拟DOM渲染时,会遍历所有的标签,不管是动态的还是静态的(虚拟DOM一般采用键值对对象来保存元素的属性和内容),当内容发生改变时,遍历虚拟DOM来找到对应的DOM节点,并改变其内容。
3.0在此基础上做出优化,3.0会标记静态和动态节点,在遍历更新时只会更新动态的,而不会遍历静态节点
- 缓存绑定事件函数,不会二次创建,而是直接调用
2.0在绑定事件的时候每次触发都会生成全新的function,然后执行函数的操作。
3.0添加了事件缓存对象cacheHandlers,在编译时会自动生成一个内联函数,将其变成一个静态节点,再次触发事件时只需调用缓存的事件回调方法即可。
- 使用Proxy代替defineProprety,减少属性添加次数
2.0使用Object.defineProperty()来实现响应式对象,对于一些复杂的对象,还需要循环递归的给每个属性增加上getter/setter监听器,这使得组件的初始化非常耗时。
3.0中,composition-api提供了一种创建响应式对象的方法reactive,其内部就是利用了Proxy API来实现的,这样就可以不用针对每个属性来一一进行添加,减少开销提升性能。
- 按需打包,按需引用
2.0会全部引用vue,例如:
import Vue from 'vue'
new Vue()
3.0在打包时不会打包未使用的内容,在引用vue时是按需引用,例如:
import { createApp } from 'vue'
createApp(App)
- 类型检测,3.0使用typescript