启用路由缓存可显著提升ThinkPHP应用路由解析速度:一、关闭调试模式并验证app_debug为false;二、执行php think route:cache生成缓存文件;三、配置route_check_cache为true启用运行时缓存;四、确保runtime目录权限正确且多应用路径匹配。

如果您发现ThinkPHP应用在请求路由解析阶段响应缓慢,则极大概率是未启用或未正确生成路由缓存。TP6/TP8默认开发模式下禁用路由缓存,每次请求均需动态解析route/app.php及注解,造成显著IO与反射开销。以下是启用路由缓存的具体操作方法:
一、关闭调试模式并确认配置生效
路由缓存仅在非调试模式下启用,必须确保app_debug配置值为false,且该设置已实际加载(环境变量不能替代配置文件中的显式赋值)。
1、打开config/app.php文件,定位到'app_debug' => true行。
2、将其修改为'app_debug' => false。
立即学习“PHP免费学习笔记(深入)”;
3、检查项目根目录下的.env文件,确保其中无APP_DEBUG=true覆盖项;若存在,须删除或设为APP_DEBUG=false。
4、在命令行执行php think env:show或在控制器中打印config('app.app_debug'),验证返回值确为false。
二、生成静态路由缓存文件
该步骤将全部路由规则(含数组定义与注解扫描结果)预编译为单一PHP文件,避免运行时重复解析,是提升路由加载速度最核心的操作。
1、在项目根目录终端执行命令:php think route:cache。
2、成功后,框架会在runtime/route/route.php路径下生成缓存文件。
3、若使用注解路由,需额外确认route.annotation_paths配置已精确限定扫描目录,避免遍历无关控制器类。
4、如命令报错,常见原因包括:路由闭包含高版本PHP语法但CLI PHP版本过低、控制器类名大小写不匹配(Linux敏感)、命名空间拼写错误或use语句缺失。
三、启用运行时路由检查缓存
此机制针对单次请求的路由匹配结果进行内存级缓存,当同一URL+Method组合重复出现时,跳过完整匹配流程,直接调度目标操作。
1、在config/app.php中添加或修改配置项:'route_check_cache' => true。
2、如需自定义缓存键(例如区分AJAX/PJAX请求),同时设置:'route_check_cache_key' => 'get_route_key'。
3、在应用公共文件(如common.php)中定义函数:function get_route_key($request) { return md5($request->url(true).':'.$request->method().':'.($request->isAjax()?1:0)); }。
4、注意:若某条路由地址为闭包函数,则该路由无法参与route_check_cache,仍会执行完整解析。
四、验证缓存文件权限与加载路径
即使缓存文件生成成功,若Web服务器进程无法读取,或框架因多应用配置误加载其他路由文件,仍将回退至慢路径解析。
1、检查runtime/目录及其子目录runtime/route/是否对Web服务用户(如www-data或nginx)具有可读权限。
2、确认runtime/route/route.php文件所有者与Web进程用户一致;若不一致,执行sudo chown -R www-data:www-data runtime/(以Nginx为例)。
3、若启用多应用模式(app/multi_app = true),核实路由缓存是否生成于对应应用子目录(如app/index/route.php),而非全局route/app.php。
4、清除浏览器及代理缓存后,访问任意已定义路由,观察响应头中是否出现X-Runtime-Route-Cache: hit等标识(需自行在中间件中添加日志输出验证)。



















