You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js Express.js 场景下如何并行处理数组对应微服务请求 降低耗时

回答

你当前使用的Promise.all代码本身已经是并行执行所有请求的实现,已经通过并行的方式做了耗时优化:
遍历ids数组调用this._getData(id)时,每个请求会被立刻触发,所有请求同时执行,总耗时等于耗时最长的单个请求的耗时,远低于串行执行时所有请求耗时相加的总耗时。

如果当前流程耗时仍然不符合预期,可从以下方向针对性优化:

  • 优先排查下游微服务的单请求响应速度,如果单请求本身耗时过高,优化下游接口的处理逻辑是收益最高的方案
  • 如果ID数组长度很大,同时发起的请求数过多触发了下游服务的限流规则,导致请求排队甚至超时,可以改用限制并发数的分批并行方案,控制同时发起的请求数量,示例代码如下:
// 自定义分批请求方法,concurrency参数为最大同时发起的请求数
async function runBatchRequest(ids, concurrency = 3) {
  const result = []
  for (let i = 0; i < ids.length; i += concurrency) {
    // 切割出当前批次的ID
    const currentBatch = ids.slice(i, i + concurrency)
    // 并行执行当前批次的所有请求
    const batchRes = await Promise.all(currentBatch.map(id => this._getData(id)))
    result.push(...batchRes)
  }
  return result
}

// 调用示例,设置最大并发数为2
const ids = [1,2,3,4]
const objects = await runBatchRequest(ids, 2)
  • 存在大量重复ID的场景,可以新增本地缓存,同一个ID只发送一次请求,后续直接复用缓存结果,避免重复请求带来的额外耗时。
  • 网络层面耗时过高的场景,可以检查服务部署位置,尽量让请求在同可用区/同地域内发起,降低网络传输耗时。

内容的提问来源于stack exchange,提问作者Mateusz Sobczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:00