并发请求需合理控制:无关接口用 promise.all 并发,优先后端聚合,限制并发数防压垮,按业务优先级调度请求。

用 fetch 并发请求多个接口不阻塞,核心是避免串行等待、合理利用浏览器并发能力,并控制资源竞争。不是“越多越快”,而是“该并的并,该控的控”。
用 Promise.all 同时发起无依赖请求
当几个接口彼此无关(比如同时拉用户信息、未读消息、系统通知),就该一起发,而不是一个接一个等:
- 把每个
fetch包装成 Promise,放进数组 - 用
Promise.all并发触发,再链式response.json() - 注意:
Promise.all任一失败,整个就中断;如需容错,改用Promise.allSettled
示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const [userRes, msgRes, notifyRes] = await Promise.all([
fetch('/api/user'),
fetch('/api/messages/unread'),
fetch('/api/notifications/latest')
]);
const [user, messages, notifications] = await Promise.all([
userRes.json(),
msgRes.json(),
notifyRes.json()
]);
网关层聚合优于前端硬并发
如果多个接口属于同一业务场景(如用户主页要展示资料+订单+收货地址),优先让后端提供聚合接口(BFF 或网关路由),前端只发一次请求:
- ✅ 正确:调用
/gateway/profile?userId=123,由网关内部并发调用 user-svc、order-svc、address-svc - ❌ 错误:前端直接请求三个微服务地址——绕过网关,丢失鉴权、日志、链路追踪
- 优势:减少请求数、统一错误处理、服务端可控降级
控制并发数,防压垮浏览器或后端
一次性发几十个 fetch 看似快,实则容易触发浏览器限制(同域默认最多 6 个并发)或后端限流:
- 对分页列表、批量导出等场景,用队列 + 限速机制,例如每次只并发 3–5 个请求
- 可用递归 + 异步函数模拟“并发池”,或引入轻量库如
p-limit - 动态判断网络状态(
navigator.onLine、effectiveType)调整并发上限
按业务优先级调度请求
首页加载时,“用户登录态”比“广告位数据”关键得多。若都扔进 Promise.all,低优先级请求可能挤占带宽,拖慢核心内容:
- 高优请求(如用户信息、权限菜单)立即发出
- 中优请求(如统计埋点、推荐商品)延迟 200ms 再发
- 低优请求(如广告、非关键上报)用
setTimeout或空闲时执行 - Vue/React 中可结合 Suspense 或 loading 状态做渐进式渲染
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










