【原创开源】Typecho-StaticCache-Plugin高性能静态缓存插件

【原创开源】Typecho-StaticCache-Plugin高性能静态缓存插件

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 前缀 |


安装方法

  1. StaticCache 文件夹上传至 Typecho 的 /usr/plugins/ 目录。
  2. 登录后台,进入「控制台 → 插件」,找到 StaticCache 并点击「激活」。
  3. 激活后会自动:

    • 创建缓存目录 /usr/cache/static/
    • 在根目录 .htaccess 中写入 Mod_Rewrite 规则
  4. 进入插件设置页配置参数(超时时间、排除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
/feed

Mod_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/ 下所有压缩文件

注意事项

  1. 服务器权限:确保 PHP 对 /usr/cache/ 目录有读写权限(建议 755)。
  2. Apache 要求:Mod_Rewrite 功能需要 mod_rewrite 模块已启用,且 AllowOverride All
  3. Nginx 用户:请手动将对应规则添加到 Nginx 配置(参考规则中的逻辑),插件不会自动修改 Nginx 配置。
  4. 登录状态:已登录管理员的浏览不会命中缓存,确保管理操作不受影响。
  5. 兼容性:需要 Typecho 1.3+,PHP 7.2+。

更新日志

v1.3.0

  • 兼容 Typecho 1.3 API
  • 新增对象缓存(内存级)
  • 新增数据库查询文件缓存
  • 新增特定页面超时配置
  • 新增 Gzip 压缩选项
  • 优化 Mod_Rewrite 规则生成
  • 优化缓存文件路径转义
下载地址 作者网站

评论区:

Avatar

暂无评论,快来抢沙发