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。