0

0

如何利用Composer的并行下载插件提高安装速度?(极限优化)

尼克

尼克

发布时间:2026-03-11 11:41:03

|

120人浏览过

|

来源于php中文网

原创

composer install 慢的根本原因是默认单线程串行处理依赖,i/o 和阻塞占时超70%;升级至2.2+、禁用钩子插件、启用--concurrency并发、优化镜像源与文件系统写入可显著提速。

如何利用composer的并行下载插件提高安装速度?(极限优化)

composer install 为什么慢得像在编译内核?

根本原因不是网络,而是 PHP 进程串行解析 composer.lock、逐个发起 HTTP 请求、解压、校验、写入磁盘——尤其当依赖超过 50 个时,I/O 等待和单线程阻塞会吃掉 70% 以上时间。

官方 composer install 默认不并发,哪怕你机器有 16 核、千兆宽带,它也只开 1 个 HTTP 连接、1 个解压进程。

实操建议:

  • 别碰 COMPOSER_PROCESS_TIMEOUT 或盲目调高 memory_limit——这解决不了并发瓶颈
  • 确认你用的是 Composer 2.2+(composer --version),低于此版本不支持原生并行下载
  • 禁用所有非必要插件:composer global config -g disable-tls true 无意义,反而危险;真正要关的是 composer-unusedphpstan-extension-installer 这类钩子型插件,它们会在每个包安装后触发,放大串行延迟

启用 composer-parallel-install 是最直接的提速方式

这不是第三方“加速插件”,而是 Composer 官方在 2.2 中合并的内置能力,通过 --concurrency 控制并发数,底层复用 cURL multi 和进程池,无需额外安装扩展。

常见错误现象:加了 --concurrency=8 但速度没变化 → 很可能是你的镜像源(如阿里云、腾讯云)本身限流或不支持 HTTP/2 多路复用,导致并发请求被排队堵死。

实操建议:

  • 优先用官方源测试基准速度:composer config -g repo.packagist composer https://packagist.org
  • 再执行:composer install --concurrency=6 --no-interaction --no-progress--concurrency 值设为 CPU 核心数 × 1.5,但不超过 12)
  • 若仍卡在某个包(比如 symfony/console),用 strace -e trace=openat,connect,write -p $(pgrep -f "composer install") 看是否在反复重试 DNS 或 TLS 握手——这时要换 DNS(如 1.1.1.1)或加 export COMPOSER_NO_TLS=1(仅限内网可信环境)

vendor 目录写入慢?关掉 fsync 和杀毒实时扫描

Composer 并行下载快了,但解压完往 vendor/ 写文件时可能又卡住——特别是 macOS APFS 或 Windows NTFS + 实时防病毒软件(如 Windows Defender、腾讯电脑管家)会同步拦截每个 file_put_contents 调用。

Grammarly
Grammarly

Grammarly是一款在线语法纠正和校对工具,伟大的AI辅助写作工具

下载

性能影响比想象中大:一个 2MB 的

.tar` 包解压成数百个小文件,fsync 触发次数 ≈ 文件数,每秒写入从 120MB 掉到 8MB。</p>
<p>实操建议:</p>
<ul>
<li>Linux/macOS:临时关闭 sync:<code>composer install --concurrency=8 --no-scripts && sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
(仅用于 CI 环境,开发机慎用)

  • Windows:进 Windows Defender 设置 → “病毒和威胁防护” → “实时保护” → 暂时关闭;或把项目目录加到排除列表
  • 统一规避方案:改用 composer install --no-plugins --no-scripts,后续用 composer run-script post-install-cmd 单独触发脚本——避免脚本在并发写入中途干扰
  • CI 环境下进一步压榨:缓存 lock + 并行 + 分层 vendor

    GitHub Actions / GitLab CI 每次都重装 vendor 是最大浪费。单纯缓存 vendor/ 目录不可靠(不同 PHP 版本、扩展差异会导致运行时错误),必须配合 composer.lock 和平台约束。

    容易踩的坑:用 cache: key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 却没锁死 PHP 版本 → 缓存命中后 ext-redis 版本不一致,composer install 静默跳过但运行时报 Class Redis not found

    实操建议:

    • composer.json 显式声明:"config": { "platform": { "php": "8.2.12" } }
    • CI 脚本分三步:
      composer install --dry-run --no-plugins 验证 lock 兼容性
      composer install --concurrency=10 --no-interaction --no-progress --no-scripts
      composer run-script post-install-cmd
    • 不要缓存整个 vendor/,缓存 ~/.composer/cache + composer.lock 哈希即可,体积小、命中率高、无污染风险

    真正的极限优化不在参数调多大,而在于让每一步都可预测、可跳过、不互相拖累。比如一个 post-install-cmd 里执行 php-cs-fixer fix,它会等全部 vendor 写完才启动,而这个过程本身是单线程的——这种地方,比改 --concurrency 值重要十倍。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    PHP Symfony框架
    PHP Symfony框架

    本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

    87

    2025.09.11

    composer是什么插件
    composer是什么插件

    Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    161

    2023.12.25

    json数据格式
    json数据格式

    JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

    454

    2023.08.07

    json是什么
    json是什么

    JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

    546

    2023.08.23

    jquery怎么操作json
    jquery怎么操作json

    操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

    334

    2023.10.13

    go语言处理json数据方法
    go语言处理json数据方法

    本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

    82

    2025.09.10

    curl_exec
    curl_exec

    curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

    454

    2023.06.14

    linux常见下载安装工具
    linux常见下载安装工具

    linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

    183

    2023.10.30

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    3

    2026.03.11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    第二十四期_PHP8编程
    第二十四期_PHP8编程

    共86课时 | 3.5万人学习

    成为PHP架构师-自制PHP框架
    成为PHP架构师-自制PHP框架

    共28课时 | 2.6万人学习

    第二十三期_PHP编程
    第二十三期_PHP编程

    共93课时 | 7.5万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号