2017-01-30 37 views
0

同時にAjaxを使用して複数のAPIを呼び出すと、非常に遅く、すべてのAPIの応答を取得して非同期的に応答しなくなるまでjavascriptが待機しているようです。複数の同時Ajaxリクエストが遅い

例えば、 /api/test1応答は通常5秒で、 および/ api/test2応答は通常5秒です。

でも、同時に呼び出すと10秒かかります。

例)それはそう、それは私が今、

$.get("/api/test1", function() { // 5 sec 
    self.responseHandler1(); 
    $.get("/api/test2", function() { // 5 sec 
     self.responseHandler2(); 
    }); 
}); 

のために行う。しかし、私はいくつかのよりよい方法があると思い速くロードするために、私に助言してください。10秒

$.get("/api/test1", function() { 
    self.responseHandler1(); 
}); 
$.get("/api/test2", function() { 
    self.responseHandler2(); 
}); 

を取ります

答えて

1

あなたのコード

$.get("/api/test1", function() { 
    self.responseHandler1(); 
    $.get("/api/test2", function() { 
     self.responseHandler2(); 
    }); 
}); 

test1のは、このコード

を取得してきたまで

$.get("/api/test1", function() { 
    self.responseHandler1(); 
}); 
$.get("/api/test2", function() { 
    self.responseHandler2(); 
}); 

TEST2を取得していない2つの要求の並列

と、この中にを取得コード

$.when($.get("/api/test1"), $.get("/api/test2")).then(function(resp1, resp2) { 
    self.responseHandler1(); 
    self.responseHandler2(); 
}); 

並列に要求を行うが、両方の応答ハンドラは一度だけ、両方の要求が(問題の変更されたコードと以下のコメントについて)テストとして

を完了して実行します

var x = Date.now(); 
$.get("/api/test1", function() { 
    self.responseHandler1(); 
}); 
console.log(x - Date.now()); 
$.get("/api/test2", function() { 
    self.responseHandler2(); 
}); 
console.log(x - Date.now()); 

コンソールに記録された2つの値は少数(簡単には100未満)でなければなりません。もしそうでなければ$.getは非同期ではありません。私のjQueryの知識は不明ですが、デフォルトの要求を同期させる方法があります。あなたのコードのいくつかの部分が何をしているのかもしれませんne - そうでなければ、問題はサーバであり、おそらく同時にリクエストを処理できません。あるいは、サーバ上でapiコードが行っている処理がブロックされているかもしれません。サーバー

+0

複数の並列を要求すると、時間がかかります。それはサーバー側の問題かもしれませんか? PHPは同時に複数のリクエストを処理できませんでしたか? –

+0

何ですか?あなたは質問のコードを変更しました。あなたは10秒かかっていますか?サーバーは一度に1つの要求しか処理できないため、シリーズ/パラレルは違いを生み出すことはありません –

関連する問題