ThinkPHP 6.0 不内置静态页面缓存,需通过 Nginx 直接服务预生成 HTML 文件及静态资源来提升并发性能;配合路由/模板缓存、合理缓存策略与闭环更新机制实现高效静态化。

ThinkPHP 6.0 本身不提供内置的「静态页面缓存」(如生成 HTML 文件),它默认的 cache 系统面向的是数据、查询结果、配置等动态内容。所谓“静态缓存提升并发性能”,实际是指:**让 Nginx 直接响应已生成的静态资源(JS/CSS/图片)或预渲染的 HTML 页面,完全绕过 PHP 和 ThinkPHP 生命周期**——这才是真正释放并发压力的关键。
用 Nginx 缓存预生成的 HTML 静态页
适用于内容更新不频繁的页面(如首页、文章详情页、帮助文档等)。需配合 ThinkPHP 主动导出或定时生成 HTML 文件:
- 在控制器中调用
file_put_contents()将渲染后的 HTML 写入public/static/下对应路径,例如public/static/article_123.html - Nginx 配置中添加 location 规则,优先尝试匹配该 HTML 文件,存在则直接返回,不进 PHP:
location /article/ {
try_files $uri /static/article_$1.html @php;
}
location @php {
fastcgi_pass php-fpm;
...
} - 注意 URL 路由与文件名映射逻辑需保持一致,建议用 ID 或唯一 slug 命名,避免时间戳类动态参数
强制 Nginx 管理静态资源强缓存
JS、CSS、图片等资源由 Nginx 直接服务,并设置长期有效缓存头,彻底减少 PHP-FPM 请求量:
- 在 Nginx server 块中为静态目录加独立 location:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Last-Modified "";
} - 配合 ThinkPHP 模板中使用带哈希的文件名(如
app_a1b2c3.js),确保内容变更时 URL 变更,浏览器自动拉新资源 - 避免使用
?v=xxx参数方式,部分 CDN 或代理可能忽略查询参数导致缓存失效
启用路由与模板缓存(框架层加速)
虽非“静态”,但能显著降低每次请求的解析开销,间接提升并发处理能力:
立即学习“PHP免费学习笔记(深入)”;
- 开启路由缓存:运行
php think route:cache,生成route_cache.php,避免每次请求都解析所有路由规则 - 开启模板缓存:确保
config/template.php中'cache' => true,并设置合理'cache_prefix'和'type' => 'File'(生产环境可切 Redis) - 若使用视图组件或大量 include,可对高频片段单独缓存:
{:widget('header')->cache(3600)}
别让缓存反成瓶颈
静态缓存策略失效常因配置冲突或更新机制缺失:
- 禁用开发环境的缓存:确保
APP_DEBUG = true时,Nginx 不启用强缓存,或通过if ($args ~ "debug") { expires -1; }临时绕过 - 清除机制要闭环:HTML 静态页更新后,必须同步删除旧文件;可借助命令行脚本或监听事件触发清理
- 避免在控制器中用
Cache::set()缓存整页 HTML——这仍需 PHP 执行、序列化、IO,不如 Nginx 直接 serve 文件高效



















