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

浏览器默认单次最多同时下载10张图片(JS),如何修改代码提升并发下载数?

解决方案

浏览器的同源并发下载上限是浏览器内置的安全规则,无法从JS层面直接绕过,我们可以通过分批并发队列的方案,把同时执行的下载任务数控制在浏览器限制阈值内,避免超出上限导致的下载阻塞、失败问题。

核心调整思路

  • 设定单批最大并发数,默认设为8即可,留2个冗余避免占满所有连接
  • 把所有下载任务拆分为多批执行,每批执行完成后再触发下一批
  • 用Promise控制异步任务的执行节奏,避免一次性触发所有saveAs调用

调整后的代码

async transferFiles() {
  this.checkMark = true
  // 单批最大并发数,可根据需求调整,不超过浏览器默认上限10即可
  const MAX_CONCURRENT = 8
  const images = this.finalImages
  let index = 0

  // 单批下载任务执行函数
  const downloadBatch = async () => {
    while (index < images.length) {
      const currentIndex = ++index
      const image = images[currentIndex - 1]
      saveAs(image, `imagem${currentIndex}`)
      // 每个下载任务之间加短延迟,避免瞬间触发过多请求
      await new Promise(resolve => setTimeout(resolve, 100))
    }
  }

  // 生成指定数量的并发任务
  const batchTasks = new Array(MAX_CONCURRENT).fill(0).map(() => downloadBatch())
  // 等待所有批次任务执行完成
  await Promise.all(batchTasks)
}

可选优化点

  • 如果需要更高的下载并发,可以把图片资源部署到不同子域名下,利用浏览器不同域名分别计算并发上限的规则,提升整体并发数
  • 如果是超大批量下载,可以在代码中增加下载完成的回调校验,避免出现漏下的情况

内容的提问来源于stack exchange,提问作者Miguel Pacheco Soares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:06:03