CodeIgniter缓存与静态化核心是减少渲染和查询以提升响应速度:页面级缓存用$this->output->cache();数据库缓存需配置DBCache并手动清理;自定义静态化通过表驱动+命令行生成HTML;中间件缓存可统一拦截公共页。

CodeIgniter 的网页缓存与静态化,核心目标是减少重复渲染和数据库查询,让高频访问页面接近静态文件的响应速度。它不依赖外部服务也能快速落地,但需注意缓存粒度、更新时机和清理机制。
页面级缓存(最常用)
适用于内容变化不频繁的列表页、详情页或首页。CI4 使用 $this->output->cache($minutes) 即可启用:
- 放在控制器方法任意位置都生效,比如在
index()开头写$this->output->cache(10);表示缓存 10 分钟; - 缓存文件默认存于
writable/cache/目录,需确保该目录可写; - 仅对通过
$this->render()或echo $this->output->get_output()输出的完整 HTML 生效; - URL 中的查询参数默认不参与缓存键生成,如需区分(如 ?lang=zh vs ?lang=en),需在
app/Config/Cache.php中设置$cacheQueryString = true;。
数据库查询缓存(针对性提速)
适合反复执行的 SELECT 查询,尤其在仪表盘、统计页中效果明显:
- 在
app/Config/Database.php中开启:'DBCache' => ['on' => true, 'directory' => WRITEPATH . 'cache/db/']; - 仅缓存结果集,INSERT/UPDATE/DELETE 不缓存;
- 缓存文件按控制器+方法名自动分组,例如
Blog::latest的查询会存到blog_latest/子目录; - 缓存永不过期,数据变更后必须手动清除,例如在发布新文章后调用
$this->db->cache_delete_all('blog_latest');。
自定义静态化管理(灵活可控)
当标准缓存无法满足运营需求(如定时批量生成、按栏目清理、CDN 预热),可建表驱动静态化流程:
- 新建数据库表记录需静态化的路由,字段含
controller、action、minutes、last_generated; - 开发一个命令行命令(如
php spark static:generate),遍历表中配置,用 cURL 或内置 HTTP 客户端触发对应 URL 并保存 HTML 到public/static/; - 配合 Nginx/Apache 规则,优先命中
/article/123.html这类物理文件,未命中再回源到 CI; - 支持后台一键清空某栏目缓存,或按时间戳批量刷新过期静态页。
中间件缓存(统一拦截)
适合全站通用策略,比如登录态无关的公共页统一缓存 1 小时:
- 在
app/Filters/CacheFilter.php中实现before()检查缓存键(如 URI + Accept 头); - 命中则直接输出并
exit,跳过整个 MVC 流程; -
after()中将响应体写入 Redis 或文件缓存,TTL 可动态计算(如根据 URL 路径前缀设定不同过期时间); - 注意排除带 Cookie 或 Session 的请求,避免缓存用户私有内容。


















