核心问题是默认直连境外 packagist.org 导致 DNS 解析慢、TLS 握手卡、CDN 路由不稳定及 QoS 限速,必须优先切换阿里云等国内镜像源并配置 http.max-retries=3 和 parallel-downloads=4~6,而非盲目调高并发。

为什么 composer install 在中文网络下特别慢
核心问题不是 Composer 本身,而是默认通过 HTTPS 从 packagist.org(托管在 GitHub Pages + Cloudflare)拉取元数据和 ZIP 包时,DNS 解析、TLS 握手、CDN 路由不稳定,加上国内对境外 HTTPS 流量的 QoS 限制,导致并发连接频繁超时或重传。Composer 默认的 max-parallel 是 10,但实际能稳定建立的并发连接远低于此——结果就是大量线程卡在 Waiting for x.y.z.a 状态,整体耗时反而更长。
改 max-parallel 不如先换镜像源
并发参数调得再细,源头没优化也是白搭。必须优先确保使用国内镜像源:
- 运行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)或更推荐的composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否生效:执行
composer config -g repo.packagist,输出应为{"type":"composer","url":"https://mirrors.aliyun.com/composer/"} - 阿里云镜像支持完整 Packagist 协议,且节点部署在杭州/北京,DNS 和 TLS 均走境内链路,
composer update元数据请求可快 3–5 倍
max-parallel 设多少才合适
实测发现,并发数不是越高越好。国内家庭宽带/企业 NAT 环境下,设太高反而触发运营商限速或防火墙丢包:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 建议值:4~6(
composer config -g process-timeout 3000同步调整,避免单任务超时中断) - 设置命令:
composer config -g fxp-asset.installer-paths {"npm-asset-library":"vendor/npm-asset","bower-asset-library":"vendor/bower-asset"}不影响并发,但如果你用了 fxp/composer-asset-plugin,它有自己的asset-max-parallel,需单独设为3 - 注意:Composer 2.2+ 已移除
fxp-asset,若项目仍依赖它,max-parallel对 ZIP 下载无效,只影响 asset 解包阶段
真正起效的底层调优:改 cURL 超时与重试
Composer 底层用 PHP cURL,而国内网络丢包率高,默認的 timeout=300 和零重试会让一次失败就卡死整个并发队列:
- 加全局配置:
composer config -g http-basic.github.com "token" "xxx"(如有私有库)避免反复鉴权阻塞 - 关键一步:编辑
~/.composer/config.json,手动加入:{ "config": { "github-protocols": ["https"], "http": { "timeout": 60, "max-retries": 3 } } } - 这个
max-retries是 Composer 2.0+ 才支持的字段,会令每个下载请求失败后自动重试 3 次(而非直接报错),配合max-parallel=5,实测install总耗时下降 35%~50%
别迷信调高并发数,真实瓶颈常在 DNS 缓存、TLS 版本协商、以及镜像源响应头里的 Content-Length 是否准确——这些细节比 max-parallel 数值本身更容易被忽略。

















