如果我同时使用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();
});
});
但我觉得有一些更好的方法,请告诉我。
答案 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代码在服务器上执行的操作阻塞 - 无论哪种方式,如果记录的数字很小,服务器存在问题