自建 Busuanzi:高性能网站访问统计服务

自建 Busuanzi:高性能网站访问统计服务
Yuban前言
不蒜子(Busuanzi)一直是我最常用的静态网站访问统计工具:无需注册、零配置,只需嵌入一段 <script>
,即可显示页面访问量(PV)和访客数(UV),用起来非常方便。
不过,随着网站访问量的增长,我越来越频繁地遇到两个问题:
- 加载延迟大:统计数据经常延迟 2~5 秒才出现,有时甚至完全加载失败;
- 服务不稳定:Busuanzi 后端依赖第三方服务(如早期的 LeanCloud),维护成本高,也偶尔出现服务宕机,导致数据无法加载。
于是我决定动手:自建一个 Busuanzi 后端,接口完全兼容原版,但性能更高、数据更稳,还能自由扩展逻辑。
我的目标
- 接口无缝替换:前端无需修改逻辑,只需更换请求地址;
- 高性能响应:支持高并发、Redis 缓存加速;
- 数据持久可靠:实时记录 PV/UV,定期批量写入 PostgreSQL;
- 兼容 JSONP:保持
<script src=...>
引入方式; - 准确 UV 去重:基于 Cookie 与 Redis 实现按天去重;
技术方案
我使用 Go 语言编写后端服务,结合 Redis 与 PostgreSQL,打造一个轻量、稳定、可扩展的访问统计系统:
模块 | 技术实现 |
---|---|
Web 框架 | Gin |
缓存机制 | Redis |
数据存储 | PostgreSQL |
UV 去重机制 | Cookie + Redis Set |
防击穿方案 | singleflight |
写入优化 | 异步批量入库 |
数据返回格式 | JSONP callback 支持 |
如何使用
前端代码无需改动,只需替换默认接口地址为自建服务地址即可:
官方默认引入方式
1 | <script src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script> |
替换为自建服务
1 | <script src="https://cdn.osyb.cn/static/busuanzi/2.3/busuanzi.pure.mini.js"></script> |
如果你是手动拼接接口调用的方式:
将以下内容:
1 | busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback |
替换为:
1 | api.osyb.cn/busuanzi?jsonpCallback=BusuanziCallback |
在安知鱼主题中如何使用?
进入主题配置文件(_config.yml
),找到末尾的 CDN 设置部分,改为:
1 | CDN: |
保存配置并重新部署即可生效。
项目地址
总结
不蒜子确实好用,但原服务的延迟和不稳定问题逐渐成为瓶颈。通过自建兼容接口,不仅可以解决加载慢、服务不稳的问题,还能做到更强的扩展性和数据可控性。如果你也在用不蒜子,不妨尝试换用我这个优化版本,体验更快、更稳的访问统计服务。
⚠️ 免责声明:本文仅供个人学习与技术研究使用。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果