联系支持

我们通过电子邮件回复,通常两天内。

为防止滥用,Google reCAPTCHA 会检查这次提交,其间会向 Google 传输数据。脚本只在此表单打开时才加载。

← 全部文章

给静态网站用的计数器

静态托管已经悄然成为把小型网站放上互联网的明智方式。GitHub Pages、Codeberg Pages、Neocities,或者随便哪个廉价主机上的一个文件夹:没有数据库,没有服务器端语言,没有需要更新的东西,也没有可能被攻破的东西。

它恰好有一个缺口。没有服务器日志可供查阅,也没有办法运行任何能代为计数的东西。网站发布出去之后,完全不知道是否有人来过。

这正是访客计数器当初被发明出来要解决的处境,也是它们其实并未过时的原因。

需要做的事

把统计页面上的代码片段粘贴到站点的HTML里,放在计数器该出现的位置。全部步骤就是这样。它之所以能用,是因为计数器由一张图片和一小段脚本组成——这两样东西,任何静态主机都会照常提供,不需要知道也不需要关心它们是什么。

静态托管一个文件夹<img> · <script>我们的服务器计数、存储、图表不用装东西,不用维护数据库,也没有会被忘记的定时任务

计数发生在我们的服务器上。静态主机始终只是一个文件夹。

脚本不该被复制进代码仓库

这是本文唯一值得单独拿出来讲的一条建议,因为静态网站的惯常做法恰恰会把人往相反的方向推。把依赖项整体搬进代码仓库,通常是一种好做法——它是可复现的,即便上游资源消失也不受影响,还能省下一次请求。

但在这里不合适。

被复制过去的脚本,会永远停留在被复制的那一刻。它会一直做着复制那天所做的事,永远如此,每次访问都一样,上游做的任何改动都触及不到它。这不是一个假设情形:今年计数器移除屏幕分辨率采集功能时,旧脚本的副本仍在继续发送这项数据,唯一能终止这种数据收集的办法,就是让服务器直接拒绝接受任何人发来的这个数值。

同样的道理也适用于安全修复、发送内容的变更,以及其他任何理应触达访客的改动。正确的做法是直接链接这段脚本。它只是一次请求,会被缓存,并且始终是最新版本。

能得到什么,不能得到什么

能得到的是访客数量、按日统计、国家、浏览器、来源域名、访问量最高的页面,以及当前正在访问网站的人的实时视图。对于个人网站、项目主页,或者小型店铺主页来说,这些通常就是全部想知道的问题了。

得不到的是日志分析,因为根本没有日志。也得不到任何关于失败请求、404文件,或者带宽方面的信息。如果这些很重要,那么静态托管从一开始就不是适合这个问题的方案。

还有一点很适合静态网站

这里的一切都不需要账号。没有注册,没有需要存进代码仓库的密码,也没有可能泄露进公开提交记录的密钥——而这恰恰是静态网站项目格外容易出的一类事故。

广告