如何处理多次超时(包含ajax调用)所造成的延迟

时间:2013-08-24 03:48:57

标签: javascript jquery asp.net ajax performance

考虑我有多个(有时超过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);
            }
    }

使用的标签解释了我使用的内容。

任何有用的答案将不胜感激

1 个答案:

答案 0 :(得分:1)

据我所知,你的问题。当您处理ajax响应并且需要消除延迟时,您会有延迟。

Javascript是单线程的。因此,如果有一个需要很长时间才能完成的函数,它可能会占据线程并导致UI无法响应。要解决这个问题,您有两个选择:

  • 优化您的代码,以便该功能不会花费很长时间。
  • 使用setTimeout将您的功能分解为更小的部分。例如:如果你的函数正在执行一个包含100个项目的循环,你可以将它分解为执行10次,每次10个项目。

更新(基于更新的问题):

当你像这样使用setTimeout时,似乎循环永远不会停止。应该有类似的东西:

counter++;
if (counter <= 12)
setTimeout(function () { FillData(accessUrl, name); }, interval);

由于ajax和你的setTimeout之间的时间问题,在某些时候,队列中有很多事件(升级)等待执行并导致性能问题。尝试将setTimeout放入successcomplete功能