Javascript 如何处理多个超时造成的延迟(包含ajax调用)
假设我有多个(有时超过12个)ajax调用,每2秒或更长时间调用一次。通过调用收集的数据被设置为包含UI的元素(如进度条)。毕竟,当定时器工作时,我会延迟滚动。这种延误是自然的,但我该如何处理呢 注意:呼叫目的地是以最短时间提供数据的服务。使滚动变得悲伤的一点是使用多个Javascript 如何处理多个超时造成的延迟(包含ajax调用),javascript,jquery,asp.net,ajax,performance,Javascript,Jquery,Asp.net,Ajax,Performance,假设我有多个(有时超过12个)ajax调用,每2秒或更长时间调用一次。通过调用收集的数据被设置为包含UI的元素(如进度条)。毕竟,当定时器工作时,我会延迟滚动。这种延误是自然的,但我该如何处理呢 注意:呼叫目的地是以最短时间提供数据的服务。使滚动变得悲伤的一点是使用多个setTimeout()和setInterval()方法。要更熟悉我的工作,请参阅以下代码: function FillData(accessUrl, name) { var add = accessUrl
setTimeout()
和setInterval()
方法。要更熟悉我的工作,请参阅以下代码:
function FillData(accessUrl, name) {
var add = accessUrl;
$.support.cors = true;
if (add) {
$.ajax({
type: 'GET',
url: accessUrl,
crossDomain: true,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
Update(name, data);
},
error: function (xhr, status, error) {
LogResponseErrors(status , error, name);
}
});
setTimeout(function () { FillData(accessUrl, name); }, interval);
//Consider that the method calls with different parameters one time and it will run automatically with setTimeout
}
else {
freezeFrame(name);
}
}
Used标签解释了我使用的内容
根据我对你问题的理解,任何有用的答案都将不胜感激。处理ajax响应时会有延迟,需要消除延迟 Javascript是单线程的。因此,如果有一个函数需要很长时间才能完成,它可能会控制线程并导致UI不响应。要解决此问题,您有两种选择:
- 优化代码,使函数不会花费很长时间
- 使用
将函数分解为更小的部分。例如:如果您的函数正在执行一个包含100个项的循环,那么您可以将其中断以执行10次,每次执行10个项setTimeout
setTimeout
时,循环似乎从未停止过。应该有如下内容:
counter++;
if (counter <= 12)
setTimeout(function () { FillData(accessUrl, name); }, interval);
counter++;
如果(谢谢你的回答。考虑到你的回答,我会更新我的问题。当然,循环是为了持续监控数据而创建的,不会停止。@A.Mokhtari:好的,但你不应该这样做。由于时间原因,这可能会导致事件在某个时候升级,并导致严重的性能问题。好吧,我的朋友,那么我的选项是?@A.Mokhtari:如果只想在调用成功时重新加载数据,请将setTimeout
放在success
内;如果需要始终重新加载数据,请将setTimeout
放在complete
内(不关心当前ajax是否成功)。在我看来,我们应该把它放在complete
中。为什么不把setTimeout放在$.ajax complete函数中呢?由于ajax和setTimeout之间的计时问题,在某些情况下,队列中有很多事件等待执行,并导致性能问题。@khato您是指“成功”函数还是其他函数她的函数名为“Complete”?还有另一个函数名为“Complete”,无论调用成功与否,它都会执行。选择取决于您需要什么。我非常相信这是一个问题。您需要检查的另一个可能的问题是,更新
是否需要很长时间才能完成。