📖 访问统计实现细节

📖 访问统计实现细节

🔍 技术架构

1. Busuanzi (不蒜子) - 核心统计引擎

┌─────────────────────────────────────────┐
│        您的个人主页 (GitHub Pages)       │
├─────────────────────────────────────────┤
│         _includes/footer/custom.html    │
│                                         │
│   ┌─────────────────────────────────┐  │
│   │  Busuanzi 统计显示界面          │  │
│   │                                 │  │
│   │ 📊 本站总访问量:123            │  │
│   │ 👤 本站访客数:45              │  │
│   └─────────────────────────────────┘  │
│                ↓                        │
│   busuanzi.ibruce.info/api/pageviews   │
│   (异步加载,不阻塞页面)               │
└─────────────────────────────────────────┘

工作流程

  1. 页面加载时,busuanzi.pure.mini.js 在后台执行
  2. 脚本向 Busuanzi API 服务器发送请求
  3. API 返回该网站的访问统计数据
  4. JavaScript 异步更新页面显示

关键代码

// _includes/footer/custom.html 第 75 行
<script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

// HTML 标签(自动填充数据)
<span id="busuanzi_value_site_pv">加载中...</span>    <!-- 访问量 -->
<span id="busuanzi_value_site_uv">加载中...</span>    <!-- 访客数 -->

2. 地理位置统计 (Ipapi) - 可选功能

┌──────────────────────────────────────────┐
│     访问者来自全球不同地点                 │
│                                          │
│  访问者 A (China) ─┐                     │
│  访问者 B (USA)   ├─→ Ipapi API ──→ 获取国家信息
│  访问者 C (Japan) ┘                      │
│                                          │
│  在您的网页显示:                         │
│  🌍 来自 China (CN)                      │
│  🌍 来自 USA (US)                        │
│  🌍 来自 Japan (JP)                      │
└──────────────────────────────────────────┘

工作流程(需启用):

  1. 访问者打开您的网页
  2. JavaScript 调用 ipapi.co API
  3. API 根据访问者 IP 地址返回国家信息
  4. 显示 “🌍 来自 [国家名称] ([国家代码])”

关键代码(被注释,可选启用):

fetch('https://ipapi.co/json/')
  .then(response => response.json())
  .then(data => {
    // data.country_name: 国家名称 (如 "China")
    // data.country_code: 国家代码 (如 "CN")
    // 更新页面显示
  })

📊 数据流向

场景 1:用户访问您的网站(启用 Busuanzi)

时间线:
────────────────────────────────────────────────────────────

T0: 用户打开网页
    ↓
T1: 浏览器加载 HTML
    ↓
T2: 加载 CSS 和基础脚本(页面可见但统计数据空白)
    ↓
T3: Busuanzi JS 脚本异步加载(< 1 秒)
    ↓ 发送请求到 busuanzi.ibruce.info
    ↓
T4: 服务器返回统计数据(1-3 秒)
    ↓
T5: 页面更新显示访问数和访客数 ✓

(整个过程不影响网页主体内容的显示)

场景 2:查看访问者来源国家(启用 Ipapi)

访问者 IP: 203.208.*.* (来自中国)
    ↓
Ipapi API 识别
    ↓
返回: {"country_name": "China", "country_code": "CN"}
    ↓
页面显示: 🌍 来自 China (CN)

🛠️ 集成方式详解

核心文件改动

文件: _includes/footer/custom.html

添加内容概览

  • 62 行注释和说明文档
  • 访问统计 HTML 结构(15 行)
  • Busuanzi 脚本加载(1 行)
  • 地理位置脚本(可选,14 行)
<!-- 新增部分结构 -->
<div style="...">
  <!-- Busuanzi 显示区域 -->
  <span id="busuanzi_container_site_pv">
    📊 本站总访问量:<span id="busuanzi_value_site_pv">
  </span>
  
  <!-- 地理位置显示区域(可选) -->
  <p id="geo-location-info">
</div>

<!-- Busuanzi 脚本 -->
<script async src="https://busuanzi.ibruce.info/..."></script>

<!-- 地理位置脚本(可选) -->
<script>
  fetch('https://ipapi.co/json/')
    ...
</script>

⚡ 性能影响分析

加载时间

组件加载时间阻塞页面备注
Busuanzi1-3 秒❌ 否异步加载
Ipapi< 1 秒❌ 否异步加载
总体影响几毫秒❌ 否用户感知不到

带宽影响

Busuanzi JS: ~5 KB (gzip)
Ipapi 数据: ~500 B (JSON)
总计: ~6 KB 额外请求(相对于全页面可忽略)

浏览器兼容性

  • ✅ Chrome 90+
  • ✅ Firefox 88+
  • ✅ Safari 14+
  • ✅ Edge 90+
  • ✅ 移动浏览器(现代版本)

🔐 隐私和安全

数据收集范围

✅ 收集数据:
  - 页面访问次数
  - 访问者的国家(仅 Ipapi 启用时)
  - 访问日期和时间

❌ 不收集数据:
  - 访问者个人身份信息
  - 访问者 IP 地址(Ipapi 仅用于获取国家)
  - 访问者浏览行为
  - Cookie 或本地存储

第三方服务

服务数据用途隐私政策
Busuanzi访问量统计无个人信息存储
Ipapi地理位置仅获取国家代码

📈 显示位置和样式

当前位置

Your Sitemap Link
─────────────────────────────────────────
📊 本站总访问量:123 | 👤 本站访客数:45
🌍 来自 China (CN)  [仅在启用时显示]
─────────────────────────────────────────
© 2025 Yu Liu, Powered by Jekyll...

自定义样式参数

<div style="
  margin-top: 20px;           /* 距离上方元素的距离 */
  padding-top: 20px;          /* 内部顶部间距 */
  border-top: 1px solid #e0e0e0;  /* 上方分隔线 */
  text-align: center;         /* 居中对齐 */
  font-size: 0.9em;           /* 字体大小 */
  color: #666;                /* 字体颜色 */
">

🔄 更新和维护

依赖关系

您的网站
    ↓
_includes/footer/custom.html
    ├─→ Busuanzi CDN (busuanzi.ibruce.info)
    ├─→ Ipapi CDN (ipapi.co) [可选]
    └─→ 本地 CSS 和 JS 库

可能的故障点

故障点影响解决方案
Busuanzi 服务宕机显示”加载中…”等待服务恢复或切换至 Google Analytics
Ipapi 服务宕机不显示国家信息等待服务恢复
网络连接不稳定数据加载缓慢无法避免,但使用异步加载不影响主页

🎯 进阶配置选项

隐藏特定统计

<!-- 隐藏访问量,只显示访客数 -->
<span style="display:none;">
  <span id="busuanzi_container_site_pv">...</span>
</span>

<span id="busuanzi_container_site_uv">
  👤 本站访客数:<span id="busuanzi_value_site_uv">
</span>

修改显示格式

<!-- 原格式 -->
📊 本站总访问量:123

<!-- 改为 -->
🌐 Page Views: 123

添加其他统计来源

// 示例:添加更新时间戳
document.getElementById('busuanzi_value_site_pv').innerHTML += 
  ' (更新于: ' + new Date().toLocaleTimeString() + ')';

📚 参考资源

官方文档

  • Busuanzi: https://busuanzi.ibruce.info/
  • Ipapi: https://ipapi.co/

源代码位置

  • 配置文件: _includes/footer/custom.html
  • 说明文档: VISITOR_STATS_GUIDE.md
  • 总结文档: STATS_SETUP_SUMMARY.md

相关链接

  • Busuanzi GitHub: https://github.com/ibruce/busuanzi
  • Ipapi 文档: https://ipapi.co/api/