Composer 2.1+ 原生支持并行下载,需版本≥2.1(推荐≥2.2.22)、禁用hirak/prestissimo、配置http-max-concurrent-downloads=8、切换阿里云镜像并清缓存,通过composer install -vvv观察多行Downloading或进度跳变验证生效。

Composer 中文环境下的并行下载不是靠“开多线程插件”实现的,而是靠 Composer 2.1+ 原生的 http-max-concurrent-downloads 配置 + 国内镜像协同生效;强行装 hirak/prestissimo 不仅无效,还会导致 file_put_contents(/tmp/): failed to open stream 等错误,且与新版 Composer 冲突。
怎么确认你的 Composer 支持并行下载
别猜,直接看版本和日志:
- 运行
composer --version,输出必须是Composer version 2.1.x或更高(推荐 ≥2.2.22);低于此版本(如 2.0.14)压根不识别并发配置 - 执行
composer install -vvv,观察终端输出:如果同时出现多行Downloading https://mirrors.aliyun.com/...,或进度从(3/42)跳到(9/42),说明并发已激活 - 若始终只有一条
Downloading在动、CPU 占用低、网络连接数极少,大概率是被静默降级了——常见原因包括 PHP 未启用curl扩展(用php -m | grep curl验证)、镜像未生效、或缓存污染
真正有效的并发配置:只认 http-max-concurrent-downloads
Composer 2.2+ 已弃用 parallel-downloads 和 parallel,设了也不生效。唯一被官方文档认可、实际起作用的是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 全局设为 8(稳妥上限):
composer config -g http-max-concurrent-downloads 8 - 临时覆盖(如 CI):
COMPOSER_MAX_PARALLEL_HTTP_REQUESTS=6 composer install - 值不是越高越好:设成 12+ 容易触发阿里云/腾讯云镜像的
429 Too Many Requests;GitHub 源则可能报403 rate limit exceeded - 若遇到
file_put_contents(/tmp/): failed to open stream,立刻降到 4~6,这是临时文件竞争的明确信号
为什么配了并发还是慢?镜像和缓存才是关键
并发只是“同时发请求”,不是“自动变快”。如果每个请求都卡在 DNS 解析、TLS 握手或首字节延迟上,开 10 个等于 10 个排队窗口:
- 必须切阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/(别用已停更的 phpcomposer.com) - 换镜像后立刻清缓存:
composer clear-cache,否则旧元数据仍走境外源 - 检查项目级
composer.json是否显式写了repositories,它会覆盖全局镜像配置,得手动删或改 - 私有仓库若支持并发,需确保返回头含
Accept: application/json,且不返回 302 跳转
别再装 hirak/prestissimo 了
它在 Composer 2.1+ 下不仅无效,还会破坏 composer.lock 结构、干扰调度逻辑,且已被官方明确标记为不兼容:
-
composer global remove hirak/prestissimo必须先执行,否则即使升级到 2.9.6,并发也会被静默降级为串行 - Composer 2.5+ 开始,
hirak/prestissimo已无法正确加载类(报Class 'Composer\Xxx' not found),强行降级到 2.5.8 只是权宜之计 - 它的“提速”本质是绕过 Composer 原生 HTTP 层,但代价是稳定性下降、CI 环境不可控、且与
--no-plugins等参数冲突
复杂点在于:并发只作用于 composer install 的 ZIP 包下载阶段;composer update 的元数据拉取仍是串行,vendor 写入、autoloader 生成、脚本执行等环节也全为单线程——这些地方卡住,并发再高也没用。

















