后台显示公告点击 1200 次,实际只有 380 个独立用户,同一账号刷新十次计数涨十次,导出明细里同一个用户 ID 出现几十行。日志里能对上时间点,这种反而好排。

埋点挂在页面加载事件上,公告只要出现在视口就上报一次,刷新自然重复计数。上报接口也没做用户和公告维度的去重。这一点先确认清楚,后面就不用反复试。

document.querySelector('.site-notice a')?.addEventListener('click', () => {
  navigator.sendBeacon('/api/notice-click', JSON.stringify({ id: NOTICE_ID }));
});

「公告点击统计」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:埋点改绑点击事件,只在用户真正点公告时上报;接口按用户 ID 加公告 ID 去重,一天内只记一次;对比后台计数和日志里的独立用户数,误差应小于百分之五。

结果对不对很好判断,刷新十次计数不变,点击一次才加一,统计与独立用户数对得上。

作者 9823189