laravel生产环境路由缓存需与配置缓存协同:先执行config:cache,再route:cache或route:trans:cache(多语言项目);精简中间件链,laravel 12+推荐使用route:cache:optimize编译型缓存。

生产环境部署 Laravel 时,路由缓存不是“开或关”的简单操作,而是需要与配置缓存、语言策略、中间件链协同生效的关键环节。盲目执行 route:cache 可能反而拖慢响应,甚至导致多语言失效或路由匹配错误。
必须配合 config:cache 一起使用
路由文件中常引用 config('app.locale')、config('services.paystack.key') 等配置项。若未提前固化配置,每次请求仍需动态加载全部 config 文件,路由缓存形同虚设。
- 严格按顺序执行:
php artisan config:cache→ 生成bootstrap/cache/config.phpphp artisan route:cache或php artisan route:trans:cache→ 此时路由缓存将读取已编译的配置值 - 部署脚本中建议加入校验逻辑,确认两个缓存文件均存在且修改时间合理
多语言项目要分语言生成和加载路由缓存
用 laravel-localization 的项目,直接运行 route:cache 会把所有语言路由混在一个文件里,匹配时仍需运行时判断语言,完全失去缓存意义。
- 安装支持扩展:
composer require mcamara/laravel-localization - 为每种语言单独生成缓存:
php artisan route:trans:cache→ 输出如routes-en-v12.php、routes-zh-CN-v12.php - 在
AppServiceProvider::boot()中加载当前语言专属缓存:use Mcamara\LaravelLocalization\Traits\LoadsTranslatedCachedRoutes;$this->loadTranslatedCachedRoutes();
精简中间件链,避免冗余语言重定向
默认启用的 localeSessionRedirect 和 localeCookieRedirect 功能高度重叠,同时存在会导致 session + cookie 双读取,徒增毫秒级延迟。
- 普通网页用户:保留
localeSessionRedirect,禁用 cookie 相关中间件 - API 或无状态客户端:改用
localeUrlRedirect,靠 URL 路径识别语言,跳过 session 初始化 - CMS 前台或静态内容页:可移除全部语言重定向中间件,仅用
localeViewPath加载对应视图路径
Laravel 12+ 推荐启用编译型路由缓存
route:cache:optimize 将路由定义直接编译为 PHP 字节码,比传统序列化缓存更快,但有前提约束:
- 禁用所有运行时条件路由(例如
if (app()->environment('local')) { Route::get(...); }) - CLI 场景(如队列任务、命令行调度)需显式调用
useCachedRoutes()启用缓存 - 首次部署后务必验证路由是否正常匹配,尤其带参数和可选段的 URL











