繁体   English   中英

如何制作一个脚本,用POST或GET每秒轮询一次而没有滞后?

[英]How to make a script that polls every second with POST or GET without lag?

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

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

该页面一直处于滞后状态。 不可能在“后台”做类似的事情吗? 没有加载或滞后问题? 如果可能的话,那就太好了! 我尝试了几件事,但效果不大。

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

您所指的是长轮询。 不知道您的代码对页面做了什么,很难说出它导致页面滞后的原因。 即便如此,每秒轮询仍会在您扩展服务器时给服务器带来很大的负担。

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

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

HTML5 Rocks很好地介绍了WebSockets

如果您希望在两次调用之间有一个确定的间隔,请尝试使用setTimeout而不是setInterval,并调用具有邮编/获取代码的相同函数。 就像是

function myTimeout() {
  //your code for post/get
  setTimeout(myTimeout, 1000);
}

这是为了确保在下一次调用“ myTimeout”之前,“ Previous Interval”已完成,而后者又发出了帖子。 我相信,使用setInterval不能保证,在您的情况下,setInterval会调用一个函数,使函数每1000毫秒发送一次,无论如何。 在延迟情况下,呼叫可能无法以所需的间隔(1000毫秒)间隔开。 但是,这仍然不能保证两次呼叫之间的固定间隔(如果呼叫/响应花费的时间比指定间隔更长)。 请在https://developer.mozilla.org/zh-CN/docs/Web/API/window.setInterval标题为“危险使用”下阅读更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM