一、检测机制
- vue2中基于Object.defineProperty的observer实现,vue3中则基于Proxy
的observer实现- 对属性的添加、删除动作的监测
- 对数组基于下标的修改,对于length修改的监测
- 对Map、Set的支持
- 默认为惰性监测
1、 在2.x版本中,响应式数据都会在启动的时候进行监测,如果数据量较大,会有严重的性能消耗
2、 在3.x版本中,只有应用初始可见部分所用到的数据会被监测到 - 更精准的变动通知:
1、在2.x版本中,通过Vue.set强制添加一个新的属性,所有依赖这个对象的watch函数都被执行一次
2、在3.x中,只有依赖这个具体属性的watch函数被通知 - 更好的调试:
1、通过使用新增的renderTracked和renderTriggered钩子,可以精确的追踪到一个组件发生重新渲染的触发时机及原因 - 暴露出observable的api来创建响应式对象,可以替代掉event bus,做一些跨组件的通信
二、性能优化
- 组件渲染:
1、在2.x版本中,父组件重新渲染时,其子组件也必须重新渲染(前提是修改的数据是子组件的props,才会触发子组件的重新渲染)
2、在3.x版本中,可以单独重新渲染子组件或者父组件 - 静态树提升
1、 在3.x版本中,编译器可以检测到静态组件,将其提升,降低渲染成本 - 静态属性提升