javascript - 多个并发 Ajax 请求速度很慢

标签 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();
    });
});

但我认为有一些更好的方法,请告诉我。

最佳答案

你的代码

$.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/

相关文章:

javascript - 通过比较一些数据使用wpdb获取数据

php - 如何在分页中给出上一个和下一个按钮?

jquery - ajax请求抛出405方法未找到错误(Laravel 5)

javascript - 为什么绑定(bind)到 <applet> 的 'load' 事件处理程序没有被调用?

javascript - VueJs计算方法错误: Cannot read property 'words' of undefined"?

javascript - 如何在用户离开(关闭)页面时发送 AJAX 请求?

css - 如何为从 $.ajax() 检索的元素赋予 CSS 属性?

javascript - 切换下拉列表保持打开状态

javascript - Jcrop 不适用于 bootstrap 3 模态

javascript - 如何对媒体片段的任何部分进行范围请求?