0

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

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

页面一直滞后。难道不能“在后台”做这样的事情吗?没有加载或滞后问题?如果这是可能的,那就太好了!我尝试了几件事,但没有太大效果。

4

3 回答 3

0

您指的是所谓的长轮询。在不知道您的代码对页面做了什么的情况下,很难说出它导致页面延迟的原因。即便如此,随着您的扩展,每秒轮询一次也会给您的服务器带来很大的负载。

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

如果您想要网络“实时”通知,请使用 WebSockets。您仍然需要为不支持 WebSockets 的浏览器实现长轮询:“浏览器兼容性”下的详细信息

HTML5 Rocks 对 WebSockets 有很好的介绍

于 2013-06-28T17:25:04.827 回答
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阅读更多内容

于 2013-06-28T18:19:45.713 回答
0

您应该将间隔时间增加到比 10 次/秒更合理的时间。也许每秒一次,其值为1000

于 2013-06-28T17:04:08.810 回答