考虑我有多个(有时超过12个)ajax调用,每隔2秒或更长时间调用一次。通过调用收集的数据被设置为包含UI的元素(如进度条)。毕竟我在计时器工作时延迟了 SCROLL 。这种延迟很自然,但我该如何处理?
注意:呼叫目的地是提供最短花费时间的数据的服务。使滚动感到悲伤的一点是使用了多种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);
}
}
使用的标签解释了我使用的内容。
任何有用的答案将不胜感激
答案 0 :(得分:1)
据我所知,你的问题。当您处理ajax响应并且需要消除延迟时,您会有延迟。
Javascript是单线程的。因此,如果有一个需要很长时间才能完成的函数,它可能会占据线程并导致UI无法响应。要解决这个问题,您有两个选择:
setTimeout
将您的功能分解为更小的部分。例如:如果你的函数正在执行一个包含100个项目的循环,你可以将它分解为执行10次,每次10个项目。更新(基于更新的问题):
当你像这样使用setTimeout
时,似乎循环永远不会停止。应该有类似的东西:
counter++;
if (counter <= 12)
setTimeout(function () { FillData(accessUrl, name); }, interval);
由于ajax和你的setTimeout
之间的时间问题,在某些时候,队列中有很多事件(升级)等待执行并导致性能问题。尝试将setTimeout
放入success
或complete
功能