如何避免前端轮询太频繁对服务器造成压力

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免前端轮询太频繁对服务器造成压力相关的知识,希望对你有一定的参考价值。

参考技术A 既然是微信,最佳的是做socket连接,不过需要你们服务端改造下,这样前端比较省心,服务端推送就好了

其次的方案是参考comet模式,发一个ajax请求出去后,服务器如果没有新消息,不要反回,hold住这个连接,直到有数据;

前端要做三个事情:
第一个事情是由于http是短连接,一般浏览器都会设置一个超时时间,所以前端这个连接如果超过一定时间没有返回,需要abort掉,重新发起,推荐30秒;
第二个事情是每次服务器有数据返回后,这个请求就结束了,你需要发起一个新的请求做监听;
第三个事情是多页面请求冲突问题,比较麻烦,不过如果你们是小游戏,应该是单页面应用就不用处理了,一般多页面应用或者WEB网站这类的,是通过localstorage来共享信息避免重发请求,也可以关掉前一个请求,在当前页面重新发起一个请求

不管哪种方案都要服务器端做改造,这不仅仅是前端自己的事,因为如果每一个连接都开一个线程,很快就会内存不够挂掉的。
参考技术B 、HTTP轮询,每隔一定时间(秒)像服务器发送HTTP请求查询消息。、使用XMPP或Sock 参考技术C 加一层Redis或者Memcache做缓存,缓解对后端特别是数据库的压力,当然也要控制好缓存的过期
前后端结合

以上是关于如何避免前端轮询太频繁对服务器造成压力的主要内容,如果未能解决你的问题,请参考以下文章

Redis使用系列使用Redis做防止重复提交

函数防抖函数节流

解决方案服务器推送

如何避免在 React Native 中轮询服务器以获取新数据?

前端关于防抖和节流

Hibernate缓存机制浅谈