每X秒获得计数,加载超过10亿个XHR请求

时间:2018-08-25 08:49:49

标签: javascript jquery ajax

我每setInterval使用5 second来获取我的通知计数器,我认为获取这些结果是个坏主意。因为如果您在我的网站上停留一会儿,就会加载十亿次XHR。
如果使用Facebook,您的XHR也不会很多。

这里是我的网站捕获了XHR: enter image description here

我在文件中的代码:notification.php

function getnotificount(){
$.post('getnotificount.php', function(data) {
        $('#notifi_count').html(data); 
    });
}

setInterval(function(){
     getnotificount();
}, 5000);

3 个答案:

答案 0 :(得分:3)

您的代码正常。它并没有“加载超过10亿个XHR请求”,它每隔X秒就开始(并完成-如我们所见)一个请求,这没什么问题。

但是,这不是实现推送通知系统的最佳方法。那将是websockets,这是您的客户端“侦听”来自服务器的消息的一种方式。为此有一些框架,最受欢迎的框架(也是我推荐的框架)是socket.io

您的第三个也是最先进/最现代的解决方案是实现service-worker-based notification system,但是我很确定这太复杂了,不适合您,因为您甚至无法完全理解问题来描述它。 / p>

答案 1 :(得分:0)

您正在做的是轮询,它会定期向服务器发出新请求。对于http请求,将打开TCP连接,交换请求/响应,并关闭TCP连接。这就是您的情况每5秒发生一次。

如果您想要更轻便的解决方案,请查看诸如socket.io之类的websocket。在正面和背面之间仅打开和维护一个TCP连接。这种双向连接使背部能够在发生某些事情时通知前部。

答案 2 :(得分:0)

这不是一个坏主意。这称为轮询,它在许多地方用作从服务器定期获取数据的一种方式。但是,这不是最好的,也不是最现代的解决方案。实际上,如果您的服务器支持WebSockets,则应该使用它们。您不需要使用NodeJS来使用WebSockets,因为WebSocket是在服务器和客户端之间创建双向通讯通道的协议。您应该阅读有关WebSocket的信息。另外,您可以使用推送通知,我认为它不如WebSockets。骇人听闻的方法是使用永久框架。