0

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

使用过的标签解释了我用过的东西。

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

4

1 回答 1

1

根据我对你的问题的理解。您在处理 ajax 响应时有延迟,您需要消除延迟。

Javascript是单线程的。因此,如果有一个功能需要很长时间才能完成,它可能会主导线程并导致 UI 没有响应。为了解决这个问题,您有 2 个选择:

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

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

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

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

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

于 2013-08-24T04:02:14.983 回答