1

問題を説明する実装の 2 つの方法を次に示します。

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

There are two main culprits if a response is sat on "pending" for too long:

  • The application code that is fulfulling the ajax request is taking longer than expected
  • Simple network latency (not much that can be done about that in the application layer)

If you have access to the code that is fulfilling the request then I'd start there. Also, it's probably not a network issue if this request is taking an unusually long time compared to all your other requests

于 2013-01-08T09:38:22.433 に答える