Composer 不支持多线程下载,批量下载实为并发 HTTP 请求,需版本、镜像、配置三者对齐才生效;盲目设置 parallel-downloads 或 --threads 无效且可能触发限流或冲突。

Composer 不支持多线程下载,所谓“批量下载”本质是并发 HTTP 请求,且必须满足版本、镜像、配置三者对齐才可能生效;盲目设 parallel-downloads 或 --threads 不仅无效,还可能触发限流或文件冲突。
composer install 为什么看起来不是批量下载?
真正卡住的往往不是带宽,而是 DNS 解析、TLS 握手或源站响应慢。即使开了并发,若每个请求都卡在连接阶段,Downloading https://... 日志仍会逐行出现,CPU 占用低、网络连接数极少——这不是并发没开,是请求根本发不出去。
- 执行
composer install -vvv观察日志:若多行Downloading几乎同时出现,或进度从(3/42)跳到(11/42),说明并发已激活 - 若始终只有一条
Downloading在动,先别调并发数,检查镜像是否生效(composer config -g repo.packagist应输出完整 URL)、DNS 是否被污染(可试dig mirrors.aliyun.com) - CI 环境中常见问题:构建镜像里没提前配镜像源,导致每次都要重拉元数据,
composer clear-cache后首次安装必然慢
怎么让并发真正跑起来?
并发控制只对 --prefer-dist(ZIP 包)有效,--prefer-source(git clone)完全不受影响;且必须 Composer ≥2.2,且 PHP 环境启用 cURL 并支持 curl_multi。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 设全局并发数:
composer config -g http-max-concurrent-downloads 8(注意:不是parallel-downloads,后者在 2.2+ 已弃用) - 设太高(如 10+)易触发阿里云镜像限流,报错
file_put_contents(/tmp/): failed to open stream,建议值为 6–8 - 该配置只影响
composer install,composer update因需实时解析依赖图,仍有不可绕过的串行阶段 - 确保
open_basedir未禁用 cURL,PHP 的 OpenSSL 版本不老旧(php -r "print_r(curl_version());"查看ssl_version)
换镜像源比调并发更关键
不换镜像,开 20 个并发也白搭。国内用户直连 packagist.org 延迟高、丢包多,90% 的“慢”问题根源在此。
- 全局切换阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 切完必须清缓存:
composer clear-cache,否则仍走旧源 - 华为镜像已停服(
302跳回官方源),清华源同步略滞后,阿里云目前最稳 - Docker 构建中,应在
FROM后立即执行镜像配置,避免后续每步都重拉
别信 --threads、-j 这类参数
composer install --threads=4 或 composer update -j8 会直接报错:Unrecognized option: --threads。这些参数不存在,是误传,源于混淆了 make -j 或 Node.js 工具链行为。
- Composer 命令行不接受任何线程/并行类参数,所有“提速”都靠配置项或环境变量
-
COMPOSER_MAX_PARALLEL=10是环境变量,不是命令行选项;它仅在部分版本中起作用,优先级低于http-max-concurrent-downloads - 插件
hirak/prestissimo只适用于 Composer 1.x,2.x 用户必须卸载:composer global remove hirak/prestissimo,否则会导致依赖解析异常
真正容易被忽略的是:并发只是“同时发请求”,而每个请求的快慢,取决于 DNS、TLS、镜像响应这三环是否通畅;调参前先确认镜像已生效、缓存已清空、PHP curl 扩展可用,否则所有配置都是空转。

















