计数器的当前值储存在CV(Current Value)中,这是PLC中动态记录累计脉冲数的标准寄存器;其另一存储单元为状态位,用于反映计数器工作状态。

计数器数据存在哪?别用 localStorage 做多人共享计数
浏览器端的 localStorage 只在当前用户、当前设备、当前域名下有效,刷新页面能保留,但换台电脑或另开无痕窗口就重置了。如果你想要的是“全站总访问量”,localStorage 完全不适用——它根本不是服务器状态,只是本地缓存。
真正可行的路径只有两条:
- 后端提供一个简单 API(比如
/api/counter),前端用fetch发 GET 或 POST 请求读写 - 借助第三方轻量服务(如 Firebase Realtime Database、Supabase 的 public table、甚至 GitHub Gist + Cloudflare Worker 代理)
纯静态 HTML 不连服务端,就不存在“真实计数器”——所谓“HTML 计数器”都是伪实现,要么骗自己,要么误导用户。
用 fetch 实现最小可行计数器(Node.js + Express 示例)
假设你有最简后端,暴露一个 JSON 接口:
立即学习“前端免费学习笔记(深入)”;
GET /counter → { "count": 127 }
POST /counter → 返回更新后的 count(可选:带 IP 去重逻辑)
前端只需三步:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- 页面加载时发一次
fetch('/counter'),把响应中的count渲染进<span id="counter"></span> - 如果希望每次访问都+1,就在
window.addEventListener('load', ...)里再发一次POST /counter - 记得加
.catch处理网络失败,避免页面空白或显示NaN
示例片段:
fetch('/counter')
.then(r => r.json())
.then(data => document.getElementById('counter').textContent = data.count)
.catch(() => document.getElementById('counter').textContent = '—');
为什么不能用 <img src="counter.php"> 这种老办法?
这种“图片像素追踪式”计数在 90 年代常见,原理是让浏览器请求一个 PHP 脚本,脚本写文件或数据库后返回 1×1 透明 GIF。现在问题很多:
- 现代浏览器会阻止混合内容(HTTP 页面加载 HTTP 计数器,而主站是 HTTPS)
- 会被广告拦截插件(uBlock Origin 等)直接屏蔽,匹配规则含
counter、hit、log等关键词 - 没有错误反馈机制:请求失败,页面上就留个挂掉的图片图标,用户和开发者都看不到
- 无法携带认证或防刷逻辑,容易被脚本暴力刷高数字
真要零后端?Cloudflare Workers 是目前最轻的替代方案
如果你只有静态托管(GitHub Pages / Netlify / Vercel),又不想搭服务器,Cloudflare Workers 提供免费额度和 KV 存储,5 分钟就能部署一个计数器:
- Worker 脚本里用
COUNTER.increment()原子操作,天然防并发冲突 - 前端仍用
fetch('https://your-worker.cf/count', { method: 'POST' }) - KV key 设为
"total",value 是字符串数字,注意解析和递增都要手动转parseInt
关键点:Workers 的 KV 不支持数值自增,必须读→改→写,所以得加简单锁逻辑或接受极低概率丢失(对访问计数影响不大)。
真实项目里,计数器的“准确性”往往不如“是否可维护”重要——一个没人看日志、没法修 bug、不能加 UA 过滤的计数器,数字再大也没意义。


















