如何使用POST或GET制作一个每秒轮询一次的脚本而不会延迟?

时间:2013-06-28 17:01:30

标签: javascript jquery

我想为我的控制管理系统建立一个通知中心。如果我使用这样的东西:

$(function(){
    setInterval(function(){
        $.post("url", { data: 'value' }, function(result){
            // check for updates
        });
    }, 1000);
});

页面一直滞后。是不是可以在背景上做这样的事情?没有装载或滞后问题?如果可能的话,这将是伟大的!我尝试了几件事,但效果不大。

3 个答案:

答案 0 :(得分:0)

你应该将你的间隔时间增加到比10次/秒更合理的时间。可能类似于每秒一次,值为1000

答案 1 :(得分:0)

您所指的是长轮询。在不知道代码对页面做了什么的情况下,很难说明它在页面上造成了什么延迟。即便如此,每一次轮询都会在您扩展时对您的服务器造成很大负担。

您需要增加时间间隔。类似于每3-10秒一次的事情不会对用户体验产生负面影响。除非您正在进行共享文档编辑或绘图应用程序,否则人们不会注意到。听起来你只是推送通知。

如果您想要网络“实时”通知,请使用WebSockets。您仍然需要对不支持WebSockets的浏览器实施长轮询:details here under 'Browser compatibilities'

HTML5 Rocks有一个很好的intro to WebSockets

答案 2 :(得分:0)

如果你想要保证你的调用间隔,而不是setInterval尝试使用setTimeout并调用具有post / get代码的相同函数。像

这样的东西
function myTimeout() {
  //your code for post/get
  setTimeout(myTimeout, 1000);
}

这样做可以保证“下一个间隔”在下一次调用“myTimeout”之前完成,而“myTimeout”又有一个帖子。我相信,我不能保证使用setInterval,在你的情况下,无论如何调用一个函数每1000毫秒发一次。由于延迟,呼叫可能不会间隔所需的间隔(1000毫秒)。 这仍然不能保证呼叫之间的固定间隔(如果呼叫/响应花费的时间比指定的时间间隔长)。 请阅读https://developer.mozilla.org/en-US/docs/Web/API/window.setInterval标题为“危险用途”

的更多内容