Skip to content

版本控制改进

概述

为了解决 Cloudflare 缓存导致的分析数据更新问题,实施了以下改进:

主要改进

1. 版本控制机制

数据生成器改进 (scripts/generate-analysis-data.js):

  • 添加了人类可读的版本号格式:YYYYMMDD_HHMM
  • 添加了精确的时间戳:version_timestamp
  • 添加了随机构建 ID:build_id,确保每次构建都有唯一标识
  • 自动生成压缩的 .gz 文件

生成的数据结构:

{
  "generated_at": "2025-07-06T08:45:36.707Z",
  "version": "20250706_1645",
  "version_timestamp": 1751791536707,
  "build_id": "qr6owzk6o",
  "website_root": "/path/to/website",
  "content_data": [],
  "statistics": {}
}

2. 缓存破坏机制

前端加载改进 (assets/js/content-analysis-upload.js):

  • 在请求 URL 中添加版本参数:?v=${timestamp}_${random}
  • 智能版本检测:比较时间戳和构建 ID
  • 自动标识新版本数据

3. 用户界面增强

新功能:

  • 详细的版本信息显示
  • 新版本标记(🆕 标志)
  • 手动刷新数据按钮
  • 多语言支持的状态提示

HTML 模板 (layouts/pages/analysis.html):

<div id="refreshDataSection" style="display: none; margin-top: 15px;">
    <button id="refreshDataBtn" class="btn btn-secondary" onclick="refreshAnalysisData()">
        🔄 {{ i18n "analysis_refresh_data" "刷新数据" }}
    </button>
</div>

4. 构建流程集成

package.json 改进:

{
  "scripts": {
    "build": "npm run generate-analysis && hugo --environment production --minify && npm run compress-json"
  }
}

现在构建过程会:

  1. 生成最新的分析数据
  2. 构建 Hugo 网站
  3. 压缩其他 JSON 文件

工作流程

本地开发

# 生成分析数据
npm run generate-analysis

# 完整构建(包含分析数据生成)
npm run build

部署后验证

  1. 分析页面会自动加载最新数据
  2. 显示版本信息和更新时间
  3. 如果检测到新版本,会显示 🆕 标记
  4. 用户可以手动点击"刷新数据"按钮

解决的问题

  1. Cloudflare 缓存问题: 通过 URL 参数确保每次都获取最新数据
  2. 版本追踪: 清晰的版本号和时间戳
  3. 用户体验: 明确的状态反馈和手动刷新选项
  4. 自动化: 构建过程自动生成最新数据

技术细节

缓存破坏策略

  • 首次加载:使用时间戳 + 随机数
  • 后续加载:优先使用数据版本信息
  • 强制刷新:清除版本缓存,重新获取

版本比较逻辑

const isNewVersion = !currentDataVersion ||
    (data.version_timestamp > currentDataVersion.version_timestamp) ||
    (data.build_id !== currentDataVersion.build_id);

多语言支持

  • 版本信息本地化显示
  • 状态提示多语言
  • 日期格式本地化

监控建议

  1. 检查构建日志确认分析数据生成
  2. 验证部署后的版本号是否更新
  3. 观察用户反馈的数据更新情况

这套改进确保了每次网站内容更新后,分析页面都能及时反映最新的数据状态。