Laravel 8 中应按顺序执行 php artisan config:clear、config:cache、route:cache,确保 APP_ENV=production、APP_DEBUG=false 且路由全为控制器方法(非闭包),才能成功生成 bootstrap/cache/routes-v8.php 并提升路由匹配速度。

在 Laravel 8 应用中,每次请求都要重新解析 routes/web.php 和 routes/api.php 中全部路由定义,导致首屏响应变慢、服务器 CPU 持续偏高;正确设置路由缓存能跳过动态注册过程,将匹配速度提升 50% 以上,但必须配合配置缓存且避开闭包写法,否则会直接报错或路由失效。
确认前提条件
执行 route:cache 前必须满足三个硬性条件:APP_ENV=production、APP_DEBUG=false、所有路由使用控制器方法语法。缺一不可,否则命令会拒绝执行或生成无效缓存。
检查当前环境变量:【env 文件中必须有 APP_ENV=production 和 APP_DEBUG=false】,不能仅靠 config/app.php 临时覆盖。
运行 php artisan route:list --compact,确认每条路由的“Action”列显示为 App\Http\Controllers\XController@y 格式,而非 Closure——出现任何 Closure 都会导致缓存失败。
生成路由缓存
路由缓存依赖配置缓存生效,因此必须按固定顺序操作:
第一步:清除旧配置缓存(尤其从开发机同步代码后必做)→ php artisan config:clear
第二步:生成新配置缓存 → php artisan config:cache
第三步:生成路由缓存 → php artisan route:cache
这三步缺一不可。如果跳过 config:cache,route:cache 会 fallback 到未缓存状态,因为路由文件中可能调用 config('app.locale') 等值,没固化配置就无法序列化。
验证是否成功:检查 bootstrap/cache/routes-v8.php(Laravel 8 对应版本号为 v8)是否存在,且文件开头是
处理多语言项目
若使用 laravel-localization,直接 route:cache 会把所有语言路由混进一个文件,匹配时仍需遍历判断,失去缓存意义。
方法一:安装专用扩展 → composer require mcamara/laravel-localization
方法二:为每种语言单独生成缓存 → php artisan route:trans:cache
执行后会在 bootstrap/cache/ 下生成 routes-en-v8.php、routes-zh-CN-v8.php 等文件,每个文件只含对应语言的路由。
方法三:在 AppServiceProvider 的 boot() 中加载当前语言缓存 → use Mcamara\LaravelLocalization\Traits\LoadsTranslatedCachedRoutes; 并调用 $this->loadTranslatedCachedRoutes();
修改路由后如何更新
路由缓存生效后,routes/web.php 或 routes/api.php 的任何改动都不会自动生效。
必须先清除旧缓存 → php artisan route:clear
再重新生成 → php artisan route:cache
【注意:route:clear 不会删除 config.php,但必须确保 config:cache 已执行过,否则新 route:cache 会读不到最新配置】
部署脚本中推荐顺序:composer install --no-dev --optimize-autoloader → php artisan config:cache → php artisan route:cache → 重启 Web 服务



















