ThinkPHP 模板编译缓存清理需同时删除 runtime/temp 和 runtime/view 目录文件,生产环境开启 tpl_cache 配置可提升加载速度。
先说结论:清理缓存解决模板更新不生效问题,开启缓存配置解决加载速度慢问题,两者需配合使用。
- 先定位:确认框架版本及缓存实际存储路径,TP5 与 TP6 路径逻辑不同。
- 先做:使用命令行或手动删除 runtime 目录下特定子目录,避免误删日志。
- 再验证:访问页面检查新缓存文件是否生成,并确认无报错。
命令速用版
ThinkPHP 提供内置命令行工具清理缓存,但不同版本命令覆盖范围不同,需结合手动删除确保彻底。
php think clear
上述命令默认清理模板和路由缓存。若需强制清理所有运行时缓存,可使用:
php think clear `--all`
对于 TP5 早期版本,建议手动清理以确保 runtime/view 目录也被清除:
rm -rf runtime/temp/* runtime/view/*
为什么会这样
模板引擎将 HTML 模板编译为原生 PHP 代码存储,重复请求直接执行编译文件。
ThinkPHP 模板引擎默认将模板文件编译成原生 PHP 代码并保存至 runtime 目录。后续请求直接执行该 PHP 文件,跳过语法解析环节。若不清理旧缓存,框架会读取损坏或过期的编译文件;若不开启缓存配置,每次请求都会重新编译,导致加载缓慢。
分步处理
按配置开启、缓存清理、权限检查三步操作,确保缓存机制正常生效。
1. 开启模板缓存配置:在配置文件中设置 tpl_cache 为 true。TP5.0 在 application/config.php,TP5.1+ 在 application/config/template.php。
'template' => [
'tpl_cache' => true
]2. 执行缓存清理命令:在项目根目录运行清理命令,或手动删除 runtime 子目录。
3. 检查目录权限:确保 runtime 目录及子目录对 Web 服务用户可写,避免缓存文件生成失败。
怎么验证是否生效
通过检查 runtime 目录文件生成时间和页面加载表现确认缓存状态。
访问页面后,查看 runtime/temp 或 runtime/template 目录下是否生成了新的 PHP 文件。若文件修改时间更新且页面无报错,说明缓存重建成功。对比开启缓存前后的响应时间,确认加载速度是否有改善。
常见坑
Cache::clear() 仅清理数据缓存,对模板编译缓存无效,勿混淆使用。
1. 命令覆盖不全:TP5 的 php think clear `--temp` 只清理 temp 目录,不清理 view 目录,可能导致旧哈希映射残留。
2. 调试模式干扰:APP_DEBUG 为 true 时,框架可能每次请求都检查模板修改时间,抵消缓存效果。
3. 路径配置错误:自定义 template_cache_path 若含非法字符,框架会静默回退默认路径,导致清理了错误目录。
常见问题
Cache::clear() 能清理模板缓存吗?
不能,该方法仅清理数据缓存驱动中的键值,模板缓存由模板引擎独立管理。
清理缓存后页面报错怎么办?
检查 runtime 目录权限是否允许写入,并确认模板文件语法是否正确。
生产环境需要关闭模板缓存吗?
不需要,生产环境应开启 tpl_cache 并关闭 app_debug 以获得最佳性能。
参考来源
ThinkPHP5 模板缓存清理方法【排错】
ThinkPHP 模板引擎缓存机制优化_升级后的页面加载提速策略
ThinkPHP5 如何开启模板缓存优化性能_ThinkPHP5 模板缓存性能优化【步骤】