计数器的当前值储存在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,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 页面加载时发一次
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 = '—');
为什么不能用
这种老办法?
这种“图片像素追踪式”计数在 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 过滤的计数器,数字再大也没意义。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










