composer dump-autoload 变慢主因是大量 PSR-0/PSR-4 扫描与 classmap 合并导致 I/O 和解析开销上升;优化建议包括禁用冗余映射、清理 autoload.files、避免误配路径,并在 CI 中使用 -o –classmap-authoritative,开发时慎用。
为什么 composer dump-autoload 会变慢?
当项目依赖多、类文件数量大(尤其含大量 PSR-0/PSR-4 映射或自定义 autoload 配置),composer dump-autoload 会遍历所有匹配路径扫描 .php 文件,生成 vendor/autoload_*.php。默认启用 --optimize(即 -o)时还会做类映射(classmap)合并,I/O 和解析开销明显上升。
常见症状:dump-autoload 耗时从几百毫秒涨到数秒;CI 流水线中频繁触发导致构建延迟;本地开发改一个 autoload 配置后等太久。
- 避免在
composer.json中混用psr-0和psr-4映射同一命名空间——Composer 会重复扫描 - 移除已废弃的
autoload.files中冗余脚本(如调试用的临时include) - 确认没有把
vendor/或node_modules/等非 PHP 目录意外写进psr-4的路径值里
何时该用 --classmap-authoritative?
这个选项让 Composer 在运行时跳过文件存在性检查,直接查 classmap —— 能显著提升 autoloader 加载速度,但要求 classmap 必须完整覆盖所有类,否则抛出 Class not found 错误。
它只在执行 dump-autoload -o 时生效,且会写入 vendor/composer/autoload_classmap.php。适合部署环境或 CI 构建后锁定类结构的场景。