缓存未命中需检查触发条件:版本约束含dev-master、ci未挂载缓存目录、私有包未配--no-cache、镜像源变更致域名不匹配、cache-files-dir与cache-vcs-dir未分开配置;生产环境应启用--classmap-authoritative和--apcu优化自动加载,而非依赖--no-cache调试。

缓存没命中?先看 composer install --verbose 输出
执行 composer install --verbose 时,如果看到 Downloading 后没有 (cached),或 Cloning 后没有 (from cache),说明缓存根本没被用上。这不是配置错了,而是触发条件不满足。
常见原因包括:
-
composer.json里写了"dev-master"或带@dev的版本约束,Composer 会跳过文件缓存 - CI 环境没挂载或复用
~/.composer/cache,比如 GitHub Actions 漏了actions/cache@v4步骤 - 私有包用了
--prefer-source但没配--no-cache,缓存里的 ZIP 被优先复制,本地改的代码反而不生效 - 镜像源变了(比如从 packagist.org 切到腾讯镜像),缓存目录虽存在,但域名不匹配,缓存不会复用
cache-files-dir 和 cache-vcs-dir 必须分开配
很多人只改 cache-dir,以为一揽子搞定,结果发现 VCS 克隆还是慢——因为 cache-vcs-dir 默认不继承 cache-dir 的路径,它有自己的默认值(~/.composer/cache/vcs/)。若你把缓存挪到 SSD 或共享目录,必须显式指定两者:
{
"config": {
"cache-dir": "/ssd/composer-cache",
"cache-files-dir": "/ssd/composer-cache/files",
"cache-vcs-dir": "/ssd/composer-cache/vcs"
}
}
否则 cache-files-dir 可能落在 NFS 上,而 cache-vcs-dir 还在慢速磁盘,克隆 Git 仓库依然卡顿。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
生产环境别只清缓存,要关掉“查找兜底”
优化自动加载不是靠缓存下载包,而是让类加载本身不碰磁盘。关键在 autoload_classmap.php 和它的使用方式:
-
composer dump-autoload --optimize生成映射表,但默认仍保留 PSR-4 查找逻辑(未命中时继续遍历目录) - 加
--classmap-authoritative(或-a)才真正关闭兜底查找,性能提升最明显 - 如果 PHP 启用了 APCu,再加
--apcu,映射表会被存进共享内存,多个 FPM 进程共用一份,避免重复加载 - 注意:
--apcu要求apc.enable_cli=0(CLI 下禁用 APCu),否则命令行执行会失败
--no-cache 不是性能开关,是调试开关
看到依赖冲突报错,第一反应不是清缓存,而是加 --no-cache 再跑一次 composer install。它强制跳过所有三层缓存(文件、VCS、元数据),让你看到原始解析过程,排除“缓存污染导致的假冲突”。
但它会让构建变慢,不能常驻 CI 配置。日常优化重点应放在缓存命中率和 autoload 权威性上,而不是反复绕过缓存。
真正影响秒级响应的,从来不是“有没有缓存”,而是“缓存是否被正确命中” + “类加载是否绕过了文件系统”。这两点漏掉任何一个,都可能让启动时间多出几十毫秒甚至上百毫秒——尤其在容器冷启或 FPM 子进程初始化阶段。










