缓存策略
问题
如果文档站点在响应中缺少恰当的 Cache-Control 头,浏览器会不必要地重新下载图片、CSS 与 JavaScript 包。这将导致视觉卡顿、带宽占用增加,并让回访用户的体验变差。
为什么重要
有效的缓存对"感知性能"影响巨大。把静态资源缓存在用户浏览器本地,可以省去重复网络请求的延迟。这能让导航感觉丝滑而稳定,即便在网络不稳的环境下也是如此。
方法
采用两层缓存策略:对静态资源(CSS、JS、图片)使用 不可变缓存 (Immutable Caching);对动态内容(HTML、JSON)使用 Etag 重新校验 (Etag Revalidation)。docmd 会生成开箱即用的生产配置,自动处理缓存破坏(cache-busting)。
实现
1. 生产就绪的服务器配置
实现最优缓存的最简方式是使用 Deploy 命令 生成服务器配置。
# 生成经过优化的 Nginx 配置
npx @docmd/core deploy --nginx
2. 不可变资源
对于不常变化的资源(例如主题样式与核心脚本),使用长期缓存。docmd 会向这些资源追加版本哈希,确保只有当您真正更新文档时,用户才会下载新版本。
# 不可变资源的 Nginx 示例规则
location ~* \.(?:css|js|webp|png|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, max-age=31536000, immutable";
}
3. HTML 与导航的重新校验
HTML 文件与 navigation.json 应始终检查更新。这样能确保用户立刻看到最新内容。使用 no-cache 指令可强制浏览器通过 Etag 与服务器重新校验。
# HTML 文件的 Nginx 示例规则
location ~* \.html$ {
add_header Cache-Control "no-cache, must-revalidate";
}
取舍
内容陈旧 vs. 性能
为资源设置较长的缓存时间性能极佳,但需要可靠的"缓存破坏"策略。docmd 会为核心文件自动处理。如果您手动向 static/ 目录添加资源,则必须在内容变化时更新其引用(例如修改文件名或追加查询参数)。
CDN 集成
如果您使用了 CDN(例如 Cloudflare 或 AWS CloudFront),请确保它遵循您服务器发出的 Cache-Control 头。大多数现代 CDN 都提供"即时清理"功能。我们建议您在每次部署新版本时,由 CI/CD 流水线触发该清理。