Composer加载速度优化_Composer 2.0新特性及升级教程【必读】

1次阅读

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

Composer加载速度优化_Composer 2.0新特性及升级教程【必读】

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.orghttps + 关闭 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-stabilityprefer-stable

Composer 2.0 对稳定性约束更严格,默认将 minimum-stability 视为 stable,且不再隐式降级匹配。以前能装的 dev-master 包,现在直接报错找不到,不是网络问题,是策略变更。

  • 查看当前配置:composer config minimum-stabilitycomposer 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 的提速逻辑不在“更快下载”,而在“更少无效操作”。最常被忽略的是:把 updateinstall 用、开着 apcu 跑 CLI、以及让 minimum-stability 失控。这些点不调,换再快的镜像也没用。

text=ZqhQzanResources