多个同时发生的Ajax请求很慢

时间:2017-01-30 03:15:04

标签: javascript ajax

如果我同时使用Ajax调用多个API,那么速度非常慢,似乎javascript会等到获得所有API的响应,而不是异步响应。

例如, / api / test1通常在5秒内响应, 和/ api / test2通常在5秒内响应。

但如果我同时打电话,则需要10秒。

例子)需要10秒

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

所以为了让它加载更快,我现在就做,

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

但我觉得有一些更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

您的代码

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

在检索到test1之前没有得到test2

此代码

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

并行检索的两个请求

和此代码

$.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());

记录到控制台的两个值应该是小数字(容易小于100) - 如果不是,那么你的$.get不是异步的 - 我的jQuery知识是模糊的,但我认为有一种方法可以使默认请求同步,这可能是您的代码的某些部分已经完成的 - 否则,问题在于服务器,也许它无法处理同时发出的请求,或者可能是api代码在服务器上执行的操作阻塞 - 无论哪种方式,如果记录的数字很小,服务器存在问题