前端/移动开发面试题更新 2026-08-05

在一个前端页面中,有三个组件都会请求同一个 API,导致该 API 被发送了 3 次请求。请问有哪些优化方案可以减少或避免这种重复请求?

前端/移动开发性能优化问题拆解方案权衡

考察说明

考查候选人对于前端重复请求问题的优化思路,以及是否了解常见的请求合并、缓存和状态管理方案。

回答思路

  1. 【回答框架 1】首先明确问题本质:多个组件独立发起相同请求,造成网络资源浪费和潜在的数据不一致。核心优化思路是让多个请求共享同一个 Promise 或结果。
  2. 【回答框架 2】方案一:请求去重(Request Deduplication)。在请求层维护一个 Map,以请求的 key(如 URL + 参数)为键,值为进行中的 Promise。当新请求发起时,若 key 已存在,直接返回该 Promise,避免重复发送。请求完成后删除 key。
  3. 【回答框架 3】方案二:全局状态管理(如 Redux、Vuex)或数据缓存。将 API 数据存入全局 store 或缓存中,组件从 store 读取数据,若数据不存在或过期再发起请求。可结合时间戳或版本号控制缓存失效。
  4. 【回答框架 4】方案三:组件间通信或提升状态。将请求提升到父组件或公共模块,由父组件统一请求后通过 props 或 context 分发给子组件,避免每个组件各自请求。
  5. 【回答框架 5】方案四:使用 HTTP 缓存(如浏览器缓存、CDN 缓存)或 Service Worker。对于 GET 请求,可设置合适的缓存策略,让浏览器直接返回缓存结果,减少网络请求。但需注意缓存更新策略。
  6. 【关键点 1】请求去重通过共享 Promise 避免重复发送相同请求。
  7. 【关键点 2】全局状态管理或缓存可减少重复请求并提升数据一致性。
  8. 【关键点 3】提升状态到父组件或公共模块可避免组件各自请求。
  9. 【关键点 4】HTTP 缓存和 Service Worker 可减少网络请求,但需注意缓存策略。
  10. 【关键点 5】优化方案需结合业务场景,权衡实时性和资源消耗。
  11. 【易错点 1】请求去重时若请求失败,需清理缓存,否则后续请求会一直复用失败的 Promise。
  12. 【易错点 2】缓存数据可能过期,需设置合理的失效策略,避免展示陈旧数据。
  13. 【易错点 3】过度优化可能导致代码复杂度增加,需评估实际收益。