项目场景:
最近一直在迭代公司的系统,业务提出需要增加一个消息通知的功能,对接完需求之后,我们就
开始热火朝天的编码、测试、上线,
就是右上角这个小图标,为了提升用户体验,我们采用每隔20S定时查询一次后端消息接口,为了让用户几十获取最新的消息,这种操作俗称“轮询请求”, 但是问题就出在这个“轮询”上,相信看到这里很多同学已经猜到我们遇到的问题,
问题描述
很多用户进入系统之后,哪怕不做操作,或者是不关闭网页,有不关电脑,我们的“轮询”就一直再跑,导致后端接口一直被调用,如果用户量庞大,很可能造成服务器宕机
解决方案:
1.最简单的方案:调整时间间隔,延长时间间隔,改为 60s ,90s 等
2.页面活跃状态监控:通过 visibilitychange 事件 监控页面活跃度,以及通过判断用户是否在当前窗口
3.通过 sse 或者 WebSocket 后端主动推流的方式,实现该功能(成本过高)
后续思考
经历了这次事件,我们深刻意识到技术选型与优化策略的重要性,在进入开发之前我们需要充分的考虑场景,有一定前瞻性。