应使用带Composer请求头的curl -w测TTFB,因composer diag不测真实延迟;需加-H指定User-Agent和Accept头、-w输出time_starttransfer、-s-o /dev/null -f静默丢弃响应体,并用--resolve绕过DNS/SNI问题。

用 curl -w 测真实 TTFB,别信 composer diag
composer diag 只检查能否连上 packagist.org,不测你实际用的镜像,也不输出 DNS、TLS、首字节(TTFB)分段耗时。它显示 “OK” 不能说明镜像快,卡在 Fetching packages 时它照样报绿。真正要定位慢在哪,得模拟 Composer 实际请求:
- 加
-H "User-Agent: Composer/2.9.6"(版本号用composer --version查) - 加
-H "Accept: application/json",否则部分镜像返回 HTML 页面或 403 - 用
-w "\nTTFB: %{time_starttransfer}s, Total: %{time_total}s\n"输出关键指标 - 加
-s -o /dev/null -f静默丢弃响应体,只测元数据接口
完整命令示例:
curl -s -o /dev/null -f \
-H "User-Agent: Composer/2.9.6" \
-H "Accept: application/json" \
-w "\nTTFB: %{time_starttransfer}s, Total: %{time_total}s\n" \
https://mirrors.aliyun.com/composer/packages.json
绕过 DNS 和 SNI 问题,直连 IP 测更准
某些镜像(如腾讯云)依赖 SNI 或 Host 头路由,curl 直连域名可能因 CDN 调度失败或 SSL 错误。这时必须强制绑定 IP:
- 先查真实 IP:
dig +short mirrors.cloud.tencent.com - 再用
--resolve绑定:--resolve mirrors.cloud.tencent.com:443:119.29.29.29 - 同时保留
-H "Host: mirrors.cloud.tencent.com",否则服务端返回 404
错误示范:curl https://mirrors.cloud.tencent.com/composer/ → 可能 SSL handshake failed;
正确写法:
curl -s -o /dev/null -f \
--resolve mirrors.cloud.tencent.com:443:119.29.29.29 \
-H "Host: mirrors.cloud.tencent.com" \
-H "User-Agent: Composer/2.9.6" \
-w "\nTTFB: %{time_starttransfer}s\n" \
https://mirrors.cloud.tencent.com/composer/packages.json
对比多个镜像时,重点看 time_starttransfer 和同步时效
TTFB(time_starttransfer)才是 Composer 卡顿的主因——它决定元数据加载速度,直接影响 Resolving dependencies 阶段。但光快没用,还得看数据新不新:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 阿里云镜像 TTFB 通常
- 腾讯云华南节点 TTFB 更低(实测平均 120ms),但华东用户可能比阿里云慢 30–50ms
- 华为云镜像不托管 dist 包,只代理 metadata,
packages.json的Last-Modified头滞后超 15 分钟即视为同步异常
验证同步是否及时:curl -I https://mirrors.aliyun.com/composer/packages.json 2>/dev/null | grep Last-Modified
再对比官方源:curl -I https://packagist.org/packages.json 2>/dev/null | grep Last-Modified
项目级 repositories 配置会覆盖全局镜像,composer config -g 查不到
你在终端执行了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但 composer install 日志里仍出现 Downloading https://packagist.org/ —— 这不是配置失败,而是项目根目录的 composer.json 里写了 "repositories" 字段。只要存在该字段(哪怕空数组),全局设置就被静默忽略。
- 检查方式:
grep -A 5 '"repositories"' composer.json - 若存在,且未显式设
"packagist.org": false,Composer 就会 fallback 到官方源 -
composer config -g repo.packagist永远只显示全局值,无法反映项目实际生效源
真正起效的判断方式:跑 composer show laravel/framework --no-ansi | head -n 3,看 URL 字段是否为镜像域名;若仍是 packagist.org,优先检查项目级配置。

















