StaticCache - Typecho 静态缓存插件
简介
StaticCache 是一款专为 Typecho 1.3 设计的高性能静态缓存插件,通过生成静态 HTML 文件缓存动态内容,配合 Mod_Rewrite 直接由 Web 服务器响应,大幅减少 PHP 和数据库的处理压力。
功能特性
| 静态 HTML 缓存 | 将动态页面生成为静态 HTML 文件,Nginx/Apache 直接响应 |
| 浏览器缓存 | 自动添加 Cache-Control / Expires 响应头 |
| 数据库查询缓存 | 将频繁查询结果序列化到文件,减少数据库压力 |
| 对象缓存 | 请求周期内内存缓存,避免重复计算 |
| Mod_Rewrite 加速 | 自动写入 .htaccess,命中缓存时完全绕过 PHP |
| 自动清理缓存 | 发布/更新文章或页面时自动清除全部缓存 |
| 手动管理缓存 | 后台一键清除静态缓存或压缩资源文件 |
| 全局超时设置 | 设置全局缓存过期时间(秒),0 为永久,-1 为禁用 |
| 特定页面超时 | 为指定 URL 设置独立超时时间,满足差异化需求 |
| Gzip 压缩 | 可选对缓存文件进行 Gzip 压缩,进一步减少传输量 |
| 登录用户跳过 | 已登录用户不使用缓存,保证内容实时性 |
| URL 排除列表 | 自定义排除不需要缓存的 URL 前缀 |
安装方法
- 将
StaticCache文件夹上传至 Typecho 的/usr/plugins/目录。 - 登录后台,进入「控制台 → 插件」,找到 StaticCache 并点击「激活」。
激活后会自动:
- 创建缓存目录
/usr/cache/static/ - 在根目录
.htaccess中写入 Mod_Rewrite 规则
- 创建缓存目录
- 进入插件设置页配置参数(超时时间、排除URL等)。
目录结构
/usr/plugins/StaticCache/
├── Plugin.php # 插件主文件(核心逻辑、钩子注册)
├── Action.php # 后台管理操作(清除缓存等)
├── Cache.php # 数据库查询缓存 & 对象缓存实现
├── plugin.json # 插件元信息
└── README.md # 使用说明
/usr/cache/static/
├── pages/ # 静态 HTML 缓存文件
│ ├── index/index.html
│ ├── about/index.html
│ └── ...
└── db/ # 数据库查询缓存文件(.cache)配置说明
全局缓存超时(秒)
| 0 | 永不过期 |
| -1 | 禁用静态缓存 |
| 正整数 | 超过此秒数后缓存失效 |
默认:3600(1小时)
特定页面缓存超时
每行一条规则,格式:URL路径前缀|超时秒数
/about|86400
/contact|1800
/news|600排除缓存的 URL
每行一个 URL 前缀,含这些前缀的页面不会生成缓存:
/admin
/login
/register
/feedMod_Rewrite 规则说明
激活插件后,会在根目录 .htaccess 中自动写入以下规则:
# BEGIN StaticCache
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_COOKIE} !typecho_authCode
RewriteCond %{DOCUMENT_ROOT}/usr/cache/static/pages/%{REQUEST_URI}/index.html -f
RewriteRule ^ /usr/cache/static/pages/%{REQUEST_URI}/index.html [L]
</IfModule>
# END StaticCache命中缓存的请求完全不经过 PHP,直接由 Apache 返回静态文件,性能极致。
使用 Cache 类(开发者)
插件提供 StaticCache_Cache 工具类,供主题或其他插件使用:
// 初始化(插件激活时自动调用)
StaticCache_Cache::init('/path/to/cache');
// 对象缓存(请求级,最快)
StaticCache_Cache::setObject('my_key', $data);
$data = StaticCache_Cache::getObject('my_key');
// 数据库查询缓存(文件持久化,TTL 单位秒)
StaticCache_Cache::setQuery('sql_hash', $result, 3600);
$result = StaticCache_Cache::getQuery('sql_hash');
// 记忆化执行(推荐方式)
$posts = StaticCache_Cache::remember('recent_posts', function() {
// 执行数据库查询
return $db->query('SELECT ...');
}, 1800);手动缓存管理
插件配置页底部提供两个操作按钮:
- 清除所有静态缓存:删除
/usr/cache/static/pages/下所有 HTML 文件 - 清除压缩 CSS/JS:删除
/usr/cache/static/assets/下所有压缩文件
注意事项
- 服务器权限:确保 PHP 对
/usr/cache/目录有读写权限(建议 755)。 - Apache 要求:Mod_Rewrite 功能需要
mod_rewrite模块已启用,且AllowOverride All。 - Nginx 用户:请手动将对应规则添加到 Nginx 配置(参考规则中的逻辑),插件不会自动修改 Nginx 配置。
- 登录状态:已登录管理员的浏览不会命中缓存,确保管理操作不受影响。
- 兼容性:需要 Typecho 1.3+,PHP 7.2+。
更新日志
v1.3.0
- 兼容 Typecho 1.3 API
- 新增对象缓存(内存级)
- 新增数据库查询文件缓存
- 新增特定页面超时配置
- 新增 Gzip 压缩选项
- 优化 Mod_Rewrite 规则生成
- 优化缓存文件路径转义
评论区:
暂无评论,快来抢沙发