秒级安装靠三条:必开prefer-dist、必换国内镜像、必设parallel-downloads=10(Linux/macOS)或6(Windows);镜像未生效时prefer-dist会静默fallback至慢速source,需验证composer config -g repo.packagist输出为含正确URL的完整JSON并执行composer clear-cache。

秒级安装不是靠玄学,而是让 Composer 少做 Git 操作、少等网络响应、少写磁盘——核心就三条:prefer-dist 必开、镜像源必换、parallel-downloads 必设。其他所谓“预下载”“离线缓存”在 CI 场景里反而容易失效或引入不一致。
为什么 prefer-dist 开了还慢?镜像没生效是主因
很多人执行了 composer config -g prefer-dist true 就以为提速了,结果 composer install 依然卡在 Downloading https://api.github.com/... —— 这说明它根本没走 dist,而是在 clone Git 仓库。
- 国内镜像(如阿里云、腾讯云)只缓存
dist包,几乎不缓存source;镜像未生效时,prefer-dist会静默 fallback 到 source,速度比不开还差 - 验证是否生效:运行
composer config -g repo.packagist,输出必须是完整 JSON,且含"url": "https://mirrors.aliyun.com/composer/"(末尾斜杠不能少) - 常见失败点:配置写错了字段名(比如写成
repos.packagist)、项目级composer.json里有"prefer-source": true(会覆盖全局设置)、或用了已停更的镜像地址(如packagist.phpcomposer.com)
parallel-downloads 设多少才真并发?别盲目堆数字
parallel-downloads 是 Composer 2.2+ 原生支持的并发机制,但它不是“多线程”,而是用 cURL multi 同时发起多个 HTTP 请求下载 ZIP 包。设太高反而触发临时文件竞争,报 file_put_contents(/tmp/): failed to open stream。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 推荐值是
10(Linux/macOS)或6(Windows,NTFS + 实时杀毒易卡写入) - 设完必须清缓存:
composer clear-cache,否则旧元数据仍指向海外源,新配置不生效 - 它只对
composer install有效;composer update仍是串行解析依赖树,再快也慢 - 如果加了
--concurrency=10却没提速,大概率是镜像源不支持 HTTP/2 多路复用,或 DNS 缓存未刷新——可临时切回官方源对比基准速度
CI 环境下 vendor 写入慢?不是网络问题,是 fsync 和杀毒拖垮的
并行下载快了,但解压完往 vendor/ 写几百个文件时,可能又卡住。这不是 Composer 的锅,是操作系统和安全软件的同步策略在起作用。
- macOS APFS 或 Windows NTFS 上,每个
file_put_contents调用默认触发fsync,导致每秒写入从 120MB 掉到 8MB - Windows Defender、腾讯电脑管家等实时扫描会拦截每个小文件写入,放大延迟
- 实操建议:CI 中禁用实时扫描(如 GitHub Actions 可用
defaults.run.shell: bash避免 PowerShell 触发额外钩子);Linux/macOS 下可临时关 sync(不推荐生产环境) - 更稳妥的做法是缓存
~/.composer/cache而非vendor/—— 不同 PHP 版本、扩展下vendor/不兼容,缓存它反而增加出错概率
真正卡住安装的,从来不是带宽,而是配置链路上某个环节没对齐:镜像 URL 少个斜杠、缓存没清、prefer-source 残留、或 Windows 杀毒软件在后台默默拦着每一个 mkdir 调用。调优不是堆参数,是逐层验证每个开关是否真实生效。

















