Composer install/update 单线程卡顿是因默认串行下载设计;需装 hirak/prestissimo 插件实现并行下载,配合国内镜像(如阿里云)才能显著提速,且仅对下载阶段生效。

composer install/update 为什么还是单线程卡顿
因为默认的 Composer 完全是串行下载——一个包下完才下下一个,网络和 CPU 都闲着。这不是配置问题,是设计如此;想提速,必须加插件干预下载层。
-
hirak/prestissimo是目前最成熟、兼容性最好的并行下载插件(PHP 7.2–8.3 均支持) - 它不改 Composer 核心逻辑,只在 HTTP 下载阶段启用多连接,对
composer.lock解析、脚本执行等后续步骤无影响 - 注意:PHP 必须启用
cURL扩展(绝大多数环境已默认开启),否则插件会静默失效 - 若你用的是 Composer 2.5+,
prestissimo已被官方部分能力替代,但实测仍比原生快 2–4 倍,尤其在国内网络下
怎么装 prestissimo 并确认生效
全局安装一次,所有项目自动受益,无需每个项目重复操作。
- 执行:
composer global require hirak/prestissimo - 装完后运行:
composer global show,看到hirak/prestissimo在列表里即成功 - 验证是否真并行:执行
composer update --dry-run -v,观察日志里是否出现类似Downloading (100%) [2/5]这样的并发进度提示 - 如果报错
Class 'Composer\Xxx' not found,大概率是 Composer 版本太新(如 v2.6+),可降级到 v2.5.8 再试:composer self-update 2.5.8
国内源 + 多线程,缺一不可
只开多线程但走国外源,照样慢;只换镜像但单线程,速度瓶颈仍在连接建立上。二者必须配合。
- 推荐阿里云镜像(稳定、同步及时):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer - 别用已停更的
phpcomposer.com镜像,2024 年起大量包返回 404 - 镜像设置后,建议清一次缓存:
composer clear-cache,避免旧包元数据干扰 - 如果公司内网有私有仓库,
prestissimo对私有源同样生效,但需确保私有源支持并发 HEAD/GET 请求
什么情况会绕过并行下载
不是所有命令都走下载流程,有些场景 prestissimo 压根不介入,别误以为“失效”。
-
composer install(有composer.lock):只下载归档包,prestissimo生效 ✅ -
composer update:先更新元数据再下载,元数据请求仍是串行(无法并行),但包下载阶段并行 ✅ -
composer require xxx:等价于 update,行为同上 ✅ -
composer dump-autoload或composer diagnose:不涉及网络,插件不触发 ❌ - 使用
--no-plugins参数时,插件被强制禁用 ❌










