Laravel部署时应精准优化中间件和路由缓存:一、多语言项目须用route:trans:cache为每种语言生成独立路由缓存文件,并在AppServiceProvider中调用loadTranslatedCachedRoutes()加载当前语言缓存;二、精简中间件链,按用户类型选择localeSessionRedirect、localeUrlRedirect或移除重定向中间件;三、路由缓存必须前置执行config:cache以确保配置固化;四、Laravel 12+可启用route:cache:optimize编译型缓存,但需禁用运行时条件路由并显式调用useCachedRoutes()于CLI场景。

部署 Laravel 应用时,中间件和路由缓存是影响首屏响应速度最直接的两个环节。不优化它们,再快的数据库或 CDN 也难救回毫秒级延迟。关键不是全量启用,而是精准裁剪 + 预编译加载。
只注册当前语言的路由缓存(多语言项目必做)
使用 laravel-localization 的项目,若直接运行 php artisan route:cache,会把所有语言的路由全塞进一个缓存文件,匹配时仍需遍历判断,失去缓存意义。正确做法是:
- 安装支持多语言路由缓存的扩展命令:
composer require mcamara/laravel-localization - 为每种语言单独生成缓存:
php artisan route:trans:cache,它会在bootstrap/cache/下生成类似routes-en-v12.php、routes-zh-CN-v12.php的文件 - 在
AppServiceProvider中加载当前语言专属缓存:
use Mcamara\LaravelLocalization\Traits\LoadsTranslatedCachedRoutes;
并在boot()中调用$this->loadTranslatedCachedRoutes();
精简中间件链,去掉冗余检查
默认中间件如 localeSessionRedirect 和 localeCookieRedirect 功能重叠,同时启用会多一次存储介质读取(session + cookie),徒增延迟。应按实际用户行为选其一:
- 面向普通网页用户:保留
localeSessionRedirect,关闭 cookie 中间件 - 面向 API 或无状态客户端:改用
localeUrlRedirect,靠 URL 路径识别语言,完全跳过 session 初始化 - 静态页面或 CMS 前台:可移除全部语言重定向中间件,仅用
localeViewPath加载对应视图路径
路由缓存必须配合配置缓存生效
路由缓存文件中可能引用 config('app.locale') 或 config('services.stripe.key') 等值。若未缓存配置,每次请求仍要动态加载全部 config 文件,抵消路由缓存收益。务必按顺序执行:
-
php artisan config:cache—— 合并配置为单文件bootstrap/cache/config.php -
php artisan route:cache或php artisan route:trans:cache—— 此时路由缓存将读取已编译的配置值 - 部署脚本中加入校验逻辑:检查
bootstrap/cache/config.php和对应路由缓存文件是否存在且非空
Laravel 12+ 启用编译型路由缓存(高并发推荐)
新版路由缓存不再只是数组映射,而是将路径规则预编译为哈希索引结构,匹配复杂度从 O(n) 降至接近 O(1)。但有硬性前提:
- 必须升级到 Laravel 12 或更高版本
- 禁用所有含运行时条件的路由定义,例如不能有:
if (app()->environment('local')) { Route::get('/debug', ...); } - 执行命令:
php artisan route:cache:optimize,生成带索引表的缓存文件 - CLI 场景(如队列、定时任务)需显式启用:
$this->app->useCachedRoutes();,否则仍走动态解析



















