Composer 2.0 默认并行下载但实际变慢,主因是APCu扩展在CLI下引发缓存锁争用;应禁用apc.enable_cli=0,生产环境用composer install --no-dev --prefer-dist --optimize-autoloader,并确保minimum-stability为stable。

Composer 2.0默认启用并行下载,但实际慢?先关掉apcu扩展
Composer 2.0 确实默认开启多并发请求(最多 4 个包并行下载),但如果你本地启用了 apcu 扩展且配置不当,反而会因缓存锁争用拖慢整体速度。常见现象是 composer install 卡在 “Loading composer repositories” 或反复重试 HTTP 请求。
- 临时验证:运行
php -d apc.enable_cli=0 composer install,若明显变快,说明apcu是瓶颈 - 长期方案:在
php.ini中禁用 CLI 模式下的 APCu:apc.enable_cli = 0(Web 服务仍可保留) - 替代缓存:Composer 2.0 原生支持
cache-dir和 HTTP 层压缩(自动用gzip),无需 APCu 加速元数据解析
composer install 还是 composer update?生产环境必须用 --no-dev 和 --prefer-dist
很多人升级到 Composer 2.0 后发现 install 变慢,其实是没区分命令语义和场景。2.0 对 update 做了算法优化(如依赖图剪枝),但 install 本身不重算依赖,只解包 —— 所以慢往往是因为没加关键参数。
-
composer install --no-dev --prefer-dist --optimize-autoloader是生产部署黄金组合 -
--prefer-dist强制走 ZIP 包而非 Git 克隆(尤其对 GitHub 包,2.0 默认已倾向 dist,但显式声明更稳) -
--optimize-autoloader生成类映射(classmap),避免 PSR-4 动态查找,autoload 性能提升显著 - 切勿在 CI/CD 中运行
composer update;它会重新解析composer.json并写入新composer.lock,破坏可重现性
镜像源不是万能的:国内用户需手动设置 packagist.org 为 HTTPS + 关闭 http-basic 认证干扰
很多教程教人换阿里、腾讯镜像,但 Composer 2.0 默认已内置中国镜像自动探测(通过 DNS 查询 packagist.phpcomposer.com)。真正卡顿常来自协议或认证层——比如公司内网强制代理返回 401,或旧版 auth.json 里残留了过期 token。
- 检查是否误启用了 Basic Auth:运行
composer config --global --unset http-basic.packagist.org - 强制走 HTTPS(避免 HTTP 301 跳转开销):
composer config --global repo.packagist.org.url https://packagist.org - 镜像仅对
dist包加速有效;metadata(即packages.json)仍需访问主站,所以单纯换镜像不一定解决“加载 repository”慢的问题
升级 Composer 2.0 后 require 报错 “Package not found”?检查 minimum-stability 和 prefer-stable
Composer 2.0 对稳定性约束更严格,默认将 minimum-stability 视为 stable,且不再隐式降级匹配。以前能装的 dev-master 包,现在直接报错找不到,不是网络问题,是策略变更。
- 查看当前配置:
composer config minimum-stability和composer config prefer-stable - 若需临时允许开发版:
composer config minimum-stability dev,但上线前务必改回stable - 更安全的做法是显式指定版本:
composer require monolog/monolog:^2.0@stable,而非依赖全局 stability 设置 - 注意:2.0 不再支持
branch-alias写法,dev-main替代dev-master,老composer.json可能因此解析失败
Composer 2.0 的提速逻辑不在“更快下载”,而在“更少无效操作”。最常被忽略的是:把 update 当 install 用、开着 apcu 跑 CLI、以及让 minimum-stability 失控。这些点不调,换再快的镜像也没用。










