Composer 2.0+ 默认启用并行下载,关键在换镜像源(如composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/)、调http-max-concurrent-downloads至10、配合--no-dev --prefer-dist --no-autoloader --no-scripts等行为控制。

Composer 2.0+ 默认已启用并行下载,无需额外插件;真正有效的配置是换镜像源 + 调整并发数 + 控制安装行为,而不是找“多线程开关”。
确认当前是否已启用并行下载
运行 composer install -v,观察输出中是否有多个 Downloading https://... 行交错出现。如果看到类似:
Downloading https://mirrors.aliyun.com/composer/p2/symfony/console.json Downloading https://mirrors.aliyun.com/composer/p2/laravel/framework.json Downloading https://mirrors.aliyun.com/composer/p2/monolog/monolog.json
说明并行已生效。若只有一条 downloading 日志顺序滚动,则可能被以下情况抑制:
- 环境变量
COMPOSER_PARALLEL_INSTALLS=0被显式设为 0 - CI 环境中镜像源主动限流(如阿里云在高并发时降级为单连接)
- PHP 进程被 xdebug 拖慢,导致事件循环卡顿(
php -d xdebug.mode=off composer install可验证)
设置国内镜像源(必须第一步)
不换镜像,其他优化效果微乎其微。执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效:
- 运行
composer config -g repo.packagist,输出应为https://mirrors.aliyun.com/composer/ - 加
-vvv运行composer install,日志中所有Downloading地址都应含mirrors.aliyun.com - 旧版 Composer(1.x)需用
repos.packagist(注意 s),且值为 JSON 字符串
项目级 repositories 配置会覆盖全局设置,检查 composer.json 是否误写了境外源。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
调高 HTTP 并发请求数
Composer 2.2+ 使用 http-max-concurrent-downloads 控制并发连接数,默认值由系统自动估算(通常 6–15)。手动设为 8 或 10 更稳定:
composer config -g http-max-concurrent-downloads 10
注意:
-
parallel-downloads是已弃用的旧配置项,设了也不生效 - 并发数不是越高越好:带宽有限、服务器限流或低内存机器上设太高反而触发重试或超时
- 该参数只影响下载阶段,不影响后续解压、生成 autoload 或脚本执行
配合行为控制才能释放并行收益
并行下载快了,但卡在 Resolving dependencies 或 Generating autoload files 是常见假象。关键要避开同步瓶颈:
- 跳过开发依赖:
composer install --no-dev(生产部署必加) - 强制走 dist 包:
--prefer-dist(避免 git clone 开销,私有包需单独配preferred-install) - 禁用脚本和插件:
--no-scripts --no-plugins(尤其避开post-install-cmd中的php artisan optimize或npm install) - 延迟 autoload 生成:
--no-autoloader,之后手动composer dump-autoload --optimize
CI 环境推荐组合:composer install --no-dev --prefer-dist --no-autoloader --no-scripts,再配合缓存 ~/.composer/cache 和 vendor/ 目录。
并行下载本身只是把网络等待时间摊薄了,真正的卡点往往藏在 PHP 解析逻辑、autoload 生成、文件系统写入或钩子脚本里。别盯着“并发数”,先确保镜像生效、xdebug 关闭、composer.lock 干净,再谈调参。

















