发布于2026-07-08 阅读(0)
扫一扫,手机访问
先说几个核心判断。Composer的并发下载问题,其实是不少开发者在部署或重构项目时都会踩到的坑——你以为`composer install`卡在“Downloading”是网络不行,其实问题本身出在Composer根本没有自动启用并行下载。默认情况下,它采用串行拉包方式,一个包一个包地下载,就算带宽再大也跑不满。
要解决这个问题,需要从两个方向入手。首先是Composer自身的并发配置——Composer 2.2起内置了parallel-downloads选项,但默认状态基本等于没开,默认值只有3,对提速帮助不大。想把速度真正提上去,得手动设置一个更高的数值。一般来说,设到10对于多数环境来说已经够用,执行下面这条命令全局生效:composer config -g parallel-downloads 10。不过要注意,这个配置只对install有用,update因为涉及元数据解析,部分流程仍是串行的,别指望它跟着一块快起来。万一遇到类似file_put_contents(/tmp/): failed to open stream的报错,说明并发数设太高导致临时文件竞争了,降到6或8就行。这个配置本质上改变的是归档包的拉取阶段,不涉及依赖解析顺序。
你可能会问:为什么我已经配好了并行下载,速度还是上不去?这里其实有一个前提:并行下载只解决“怎么下得快”的问题,但前提是“能连上、有得下”。国内直连packagist.org经常卡在DNS解析或者TLS握手阶段,如果连接本身都建立不起来,线程全堵在那里,并发数再高也于事无补。
所以,必须配合国内镜像源来用。阿里云镜像目前是稳定可靠的选择之一:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/。配置完成后,建议顺手清了缓存:composer clear-cache,防止旧元数据干扰。有个容易踩的坑是:如果项目中composer.json里显式写了repositories字段,它会覆盖全局镜像配置,你得手动改掉或删除它。还有一点值得提醒:那个已经停更的phpcomposer.com镜像就别用了,从2024年起那里的返回大量是404。
那么老的prestissimo插件现在还有必要装吗?在Composer 2.5+环境下,hirak/prestissimo仍然比原生的parallel-downloads快2到4倍,尤其在国内网络环境下。但它和Composer原生的并发不能共存,二者只能选一个。如果需要使用,全局安装就好:composer global require hirak/prestissimo。装好后可以运行composer update --dry-run -v验证是否生效,看日志里有没有类似Downloading (100%) [2/5]的并发进度提示。另外要注意,PHP环境必须启用cURL扩展,否则这个插件会静默失效。另外从Composer v2.6开始,这个插件可能出现类找不到的报错,这种情况可以考虑降级到v2.5.8:composer self-update 2.5.8。如果你的CI脚本里使用了--no-plugins参数,它会强制禁用所有插件,包括prestissimo,这一点也要小心。
最后还有一点要注意:不是所有Composer命令都走下载流程,并行机制只在真正拉包时介入。比如composer dump-autoload、composer diagnose这类命令根本不涉及网络请求;composer install --no-install或--dry-run也会跳过下载;composer update在元数据刷新阶段(比如请求GET /packages.json)仍然是串行的,只有后面的dist包下载阶段才会用到并行。此外,--no-plugins也会绕过prestissimo,而parallel-downloads对require类命令也不起作用。
关于并发数的设置,有一点要记住:不是越大越好。超过8很容易触发GitHub API的限流(返回403 rate limit exceeded),也容易把本地DNS缓存占满,或者对小带宽环境造成压力。从实际测试来看,6到10是多数项目比较理想的甜点区间,但最终怎么调,还得结合你具体的网络环境来试。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8