問題を説明する実装の 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
処理されているときに他のリクエストはアクティブではありません。
問題を修正または分析する方法は何ですか? アドバイスをいただければ幸いです。