如果我同时使用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();
});
});
但我认为有一些更好的方法,请告诉我。
最佳答案
你的代码
$.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 代码正在执行的任何操作服务器阻塞 - 无论哪种方式,如果记录的数字很小,则服务器存在问题
关于javascript - 多个并发 Ajax 请求速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928559/