Composer 2通过并行下载机制提升依赖安装速度,利用非阻塞I/O和事件循环同时处理多个HTTPS请求,解析完成后将包下载任务加入队列,并发获取元信息与压缩包,复用TCP连接减少开销,支持配置最大并发数(COMPOSER_MAX_PARALLEL_HTTP_REQUESTS),默认维持6~15个并行请求,进度条交错更新体现并发效果,但提速主要集中在下载阶段,安装与自动加载仍为同步操作。

Composer 2 引入了并行下载机制,显著提升了依赖包的安装和更新速度。它不再像 Composer 1 那样按顺序一个一个地请求和下载包,而是利用并发能力同时处理多个网络请求。
并行下载的基本原理
Composer 在解析完 composer.json 并确定需要安装或更新的包列表后,会将这些包的下载任务放入一个队列中。Composer 使用 PHP 的非阻塞 I/O 和事件循环机制(通过内部封装的异步 HTTP 客户端)来同时发起多个 HTTPS 请求。
这意味着多个包的元信息获取、压缩包下载可以几乎同时进行,而不是等待前一个完成再开始下一个。
如何实现并行:HTTP 并发与连接复用
Composer 2 内部使用了更高效的 HTTP 客户端(基于 php-curl 或其他支持并发的适配器),它:- 为不同的包仓库(如 packagist.org)建立多个并发连接
- 复用已建立的 TCP 连接(keep-alive),减少握手开销
- 对元数据(如版本信息)和实际的 zip 文件分别进行优化调度
例如,当需要下载 10 个不同托管在 CDN 上的 zip 包时,Composer 会一次性发起最多 6~15 个并行请求(具体数量可配置或由系统自动调整),等其中某个完成后再补上下一个,始终保持一定数量的并发任务。
用户可感知的表现与配置
你在运行 composer install 或 update 时会看到进度条交错更新,这是并行下载的直观体现。你也可以通过配置控制并发行为:
-
修改最大并发数:可通过环境变量
COMPOSER_MAX_PARALLEL_HTTP_REQUESTS调整(默认值通常为系统推荐值) - 受限于网络带宽和远程服务器限流,并发数并非越高越好
- 在低性能机器或弱网环境下,Composer 会自动降级部分并发行为以保持稳定性
基本上就这些。Composer 2 的并行下载不是靠多进程,而是通过高效的异步 I/O 调度,在单进程内实现高吞吐的网络操作,从而加快整体依赖解析后的拉取阶段。不复杂但容易忽略的是,它的提速主要体现在“下载”阶段,而“安装”和“自动加载生成”仍是后续同步步骤。










