Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果我使用setInterval每3秒或更短的时间调用ajax会发生什么?_Javascript - Fatal编程技术网

Javascript 如果我使用setInterval每3秒或更短的时间调用ajax会发生什么?

Javascript 如果我使用setInterval每3秒或更短的时间调用ajax会发生什么?,javascript,Javascript,我有一个很短的问题。如果我使用setInterval方法调用ajax函数,比如每3秒钟检查收件箱中的消息(或者如果我可以每1秒钟检查一次,那会怎么样!) 这就是我所用的: setInterval(function() { chk_inbx (var1, var2); }, 8000); 我现在每8秒调用一次这个函数。我看没问题。(或者我现在没有那么多用户) 但是如果我把它从8000改成3000甚至1000,会发生什么呢 更新 我已经测试了投票( ) 我想知道setTimeout和setTim

我有一个很短的问题。如果我使用setInterval方法调用ajax函数,比如每3秒钟检查收件箱中的消息(或者如果我可以每1秒钟检查一次,那会怎么样!)

这就是我所用的:

setInterval(function() {
chk_inbx (var1, var2);

}, 8000);
我现在每8秒调用一次这个函数。我看没问题。(或者我现在没有那么多用户)

但是如果我把它从8000改成3000甚至1000,会发生什么呢

更新 我已经测试了投票( )

我想知道setTimeout和setTimeout与轮询之间有什么区别。 据我所知,在php文件中,他们将sleep()放在;函数和使用时间戳 确定数据是否旧

但是我的,我用nNdy来确定是否读取了msg。如果为N,则显示行数


那么有什么不同呢?有人能帮我吗?

如果请求完成的时间比您的轮询时间长,可能会导致问题。请求的持续时间将取决于用户的网络速度和地理位置。浏览器将限制并发请求的数量,但它们将继续对新请求排队,队列将增长到不合理的大小,可能会减慢甚至使某些浏览器崩溃

有更好的方法来实现你想做的事情。最常见的跨浏览器方式(WebSocket也可以在现代浏览器中解决这个问题)是使用


对于长轮询,您在收到响应后立即发送请求,因此您总是连续轮询。web服务器处理进程空闲和重复检查新消息,而不生成响应,直到超时(您可以选择30秒左右)或有新数据通知浏览器。

如果请求完成时间长于轮询时间,则可能会导致问题。请求的持续时间将取决于用户的网络速度和地理位置。浏览器将限制并发请求的数量,但它们将继续对新请求排队,队列将增长到不合理的大小,可能会减慢甚至使某些浏览器崩溃

有更好的方法来实现你想做的事情。最常见的跨浏览器方式(WebSocket也可以在现代浏览器中解决这个问题)是使用


对于长轮询,您在收到响应后立即发送请求,因此您总是连续轮询。web服务器处理进程空闲和重复检查新消息,而不生成响应,直到超时(您可以选择30秒左右)或有新数据通知浏览器。

您应该避免以这种方式使用
setInterval()

setInterval()
的问题是,它每3秒(或其他任何时间)就会触发一次事件,即使上一个事件尚未完成

如果您的响应时间比间隔时间慢,这可能会导致请求相互叠加,甚至可能没有按照请求的顺序响应的重大问题

设置的间隔越小,这将变得越来越明显,但如果JS代码中存在任何类型的阻塞事件,即使间隔很长,这也可能是一个问题。
alert()
框就是一个典型的例子,因为您可能会导致大量间隔事件堆积起来,等待清除警报,然后所有人立刻开火

更好的解决方案是使用自触发
setTimeout()


这将使用
setTimeout()
启动事件序列,然后在其事件完成时在内部调用另一个相同的
setTimeout()
调用。这确保了您永远不会像使用
setInterval()

那样堆积多个事件。您应该避免以这种方式使用
setInterval()

setInterval()
的问题是,它每3秒(或其他任何时间)就会触发一次事件,即使上一个事件尚未完成

如果您的响应时间比间隔时间慢,这可能会导致请求相互叠加,甚至可能没有按照请求的顺序响应的重大问题

设置的间隔越小,这将变得越来越明显,但如果JS代码中存在任何类型的阻塞事件,即使间隔很长,这也可能是一个问题。
alert()
框就是一个典型的例子,因为您可能会导致大量间隔事件堆积起来,等待清除警报,然后所有人立刻开火

更好的解决方案是使用自触发
setTimeout()


这将使用
setTimeout()
启动事件序列,然后在其事件完成时在内部调用另一个相同的
setTimeout()
调用。这确保了你永远不会像使用
setInterval()

那样让多个事件堆积起来,然后你会多打266%的电话。j08691哦,现在听起来很可怕:)但是你觉得呢?使用推送模式..相反..如果你想要实时通信,AjaxI建议你看看其他平台。看看所谓的长轮询,因为这可能是一个更好的选择。我知道Node.js可以做到这一点,我认为有些python库也可以处理长时间轮询。我看到很多人都在谈论这一点,我会在那里四处看看:)谢谢:)然后你会多打266%的电话。j08691哦,现在听起来很可怕:)但你怎么看?使用推送模式。相反。如果你想要实时通信,AjaxI建议你看看另一个平台。看看所谓的长轮询,因为这可能是一个更好的选择。我知道Node.js可以做到这一点,我认为有些python库也可以处理长轮询