thinkphp路由耗时长应启用路由缓存:tp6/tp8推荐生成静态路由缓存文件(php think route:cache);v5.1.14+可启用运行时路由检查缓存(route_check_cache=>true);还可开启全局请求缓存(request_cache=>true)优化响应。

如果您在使用ThinkPHP时发现路由解析耗时较长,尤其是在大量路由规则或高并发场景下,可能是由于未启用路由缓存机制。以下是针对不同版本与部署需求的路由缓存配置方法:
一、生成静态路由缓存文件(TP6/TP8 推荐)
该方式将全部路由规则预编译为 PHP 数组文件,避免每次请求重复加载和解析 route.php 或扫描注解,显著降低 IO 与反射开销。
1、确认应用已关闭调试模式:在 config/app.php 中确保 'app_debug' => false 已生效,且非仅依赖环境变量控制。
2、执行命令行指令生成缓存:php think route:cache。
3、验证缓存文件是否生成:检查 runtime/route/route.php 是否存在且内容非空。
4、若使用注解路由,需确保 route.annotation_paths 配置正确,并建议配合 php think optimize:annotate 提前解析注解以减少首次加载延迟。
二、启用运行时路由检查缓存(V5.1.14+ 支持)
此机制对单次请求的 URL + HTTP 方法组合进行内存级缓存,适用于同一请求频繁复用的场景,无需生成物理文件,但仅在部署模式下生效。
1、在 config/app.php 中添加或修改配置项:'route_check_cache' => true。
2、如需区分 AJAX/PJAX 等请求类型,同时设置:'route_check_cache_key' => 'get_route_key'。
3、在应用公共文件(如 app/common.php)中定义缓存键生成函数:
function get_route_key($request) { return md5($request->url(true).':'.$request->method().':'.($request->isAjax()?1:0)); }
4、注意:若某条路由地址为闭包函数,则该路由无法参与 route_check_cache,仍将执行完整解析流程。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
三、启用全局请求缓存(按 URL 路径缓存响应)
该方式不缓存路由匹配逻辑本身,而是对匹配成功后的控制器响应内容进行缓存,适用于内容变动少、读多写少的接口或页面。
1、在 config/app.php 中开启全局请求缓存:'request_cache' => true。
2、设置默认缓存有效期:'request_cache_expire' => 3600(单位:秒)。
3、在 route/app.php 中为具体路由指定缓存策略,例如:
Route::get('news/:id','News/read',['cache'=>3600]);
4、可自定义缓存标识与标签,如:['cache'=>['news/:id',3600,'news']],便于后续批量清理。
四、清理路由相关缓存
路由配置变更后,旧缓存若未及时清除,将导致新规则不生效或 404 错误,必须主动触发清理操作。
1、清除静态路由缓存文件:php think route:clear。
2、清除运行时路由检查缓存(内存中):需重启 Web 服务或 Swoole Worker 进程。
3、清除请求响应缓存:调用 Cache::tag('think_request_cache')->clear(),前提是已配置缓存驱动并启用标签支持。
4、手动删除 runtime/route/ 目录下所有文件,确保无残留缓存干扰。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










