1

这是描述该问题的两种实现方式。

第一个是工作非常缓慢的方法。它尝试从服务器获取数据,但请求pending太长,然后才返回数据并且一切都很好(除了可怕的同步性能)。

asyncMethod: function(doSmth, param) {  
    var resp = $.ajax({
        type: 'GET',
        async: false,
        url: 'url'
    });
    data = resp.responseText;
    doSmth(param, data);
}

这是相同的方法,但它是异步的。性能问题在这里被消除了。但它只有在重新加载页面时才能成功执行该部分。可能重新加载会停止一些执行,这些执行是先前代码示例的瓶颈。

asyncMethod: function(doSmth, param) {  
    var resp = $.ajax({
        type: 'GET',
        url: 'url',
        success: function () {
            data = resp.responseText;
            doSmth(param, data);
        }
    });
}

我不需要使用异步请求,如果同步请求工作得很快(但现在没有了)。似乎有一些处决,使请求保持等待太久。我没有看到可能成为瓶颈的执行。也许它在使用的库中的某个地方,但resp在处理时没有其他请求处于活动状态。

解决问题或分析问题的方法是什么?建议将不胜感激。

4

2 回答 2

1

您是否尝试过这样的异步方法:

asyncMethod: function(doSmth, param) {  
    $.ajax({
        type: 'GET',
        url: 'url',
        success: function (response, status) {
            doSmth(param, response.responseText);
        }
    });
}
于 2013-01-07T16:57:04.760 回答
1

如果响应长时间处于“待处理”状态,则有两个主要罪魁祸首:

  • 完成 ajax 请求的应用程序代码花费的时间比预期的要长
  • 简单的网络延迟(在应用层可以做的不多)

如果您有权访问满足请求的代码,那么我将从那里开始。此外,如果与您的所有其他请求相比,此请求花费的时间异常长,则可能不是网络问题

于 2013-01-08T09:38:22.433 回答