面试题答案
一键面试可能出现的性能问题
- 不必要的重新渲染:父组件状态变化时,即使子组件实际依赖的数据未改变,也会因props更新而重新渲染,浪费性能。
- 数据传递开销:多层嵌套传递数据,每次传递都有一定的性能开销,尤其在数据量较大时,影响更明显。
优化父子组件间数据传递提升性能的方法
- 使用Vuex或Pinia:对于全局共享且会被多个组件频繁使用的数据,放入状态管理库,避免层层传递props。
- 缓存数据:在父组件中缓存不变的数据,只有数据变化时才更新props传递给子组件。
- 事件总线:对于一些非父子组件间的通信,可以使用事件总线来减少props的传递层次。
传递大量静态数据避免不必要重新渲染的策略
- 计算属性缓存:在父组件中使用计算属性缓存静态数据,只有计算属性依赖的数据变化时才重新计算,再传递给子组件。
- Object.freeze():将静态数据使用
Object.freeze()
冻结,Vue检测到对象没有变化就不会触发子组件重新渲染。例如:
export default {
data() {
return {
largeStaticData: Object.freeze({ /* 大量静态数据 */ })
};
},
computed: {
// 可以在这里进行数据处理
processedStaticData() {
return this.largeStaticData;
}
}
}
然后将processedStaticData
传递给子组件。这样即使父组件其他数据变化,只要largeStaticData
不变,子组件就不会因props变化而重新渲染。