实时大屏每 1 秒请求一次统计接口,20 个页面同时开着,监控里 QPS 冲到 400,数据库连接数跟着涨。日志里能对上时间点,这种反而好排。

前端定时器写死 1 秒,没有合并请求,也没有判断页面是否可见。多个图表各自轮询,同一份数据被重复拉了多次。这一点先确认清楚,后面就不用反复试。

const timer = setInterval(load, 10000);
document.addEventListener('visibilitychange', () => {
  document.hidden ? clearInterval(timer) : load();
});

这次卡住的地方就在「图表实时刷新频率」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:把轮询间隔按业务需要调到 10 秒以上;页面切到后台时暂停定时器 回来再拉一次;多个图表共用一次请求 结果分发下去。

结果对不对很好判断,大屏 QPS 降到 40 以下,切到别的标签页后请求停止。

作者 9823189