【问题标题】:xmlhttprequest simultaneous request not workingxmlhttprequest 同时请求不起作用
【发布时间】:2015-12-21 23:14:57
【问题描述】:

我正在尝试发出“许多”xhr 请求,但似乎每次它都会在发出另一个请求之前等待答案。这就像 XHR 建立一个队列并始终等待上一个请求完成。

我该怎么做才能同时运行更多 xhr 请求?

$('body').delegate('.download','click', function(evt){
        evt.preventDefault(); // Not related

        var xhr = new XMLHttpRequest();
        xhr.open('GET', "proxy.php?" + this.href, true);
        xhr.responseType = 'blob';

        xhr.onload = function() {
            if (this.status == 200) {              
                var blob = new Blob([this.response], {type:'audio/mp4'});

                console.log(blob.size);
                if(blob.size > 0){
                    $("<a>").attr({
                        download: name,
                        href: URL.createObjectURL(blob),
                        target: "_blank"
                    })[0].click();
                }
            }
        };  
        xhr.send();
    });

【问题讨论】:

  • 你试过使用 web worker 吗?
  • 是的,同样的事情发生了..两个工人被一起调用,但第二个 XHR 等待第一个 XHR 完成
  • 如何打开新的浏览器窗口,进行请求,使用 post 消息发送响应,然后关闭窗口?只是可能有帮助的想法.. 不是很熟悉这个主题。
  • 另外考虑一下,使用更多变量或数组或对象来存储 xhr.. 在服务器响应之前,该变量可能仍在使用中。
  • 你用 jquery deferred 试过了吗?只是一个想法。

标签: javascript asynchronous xmlhttprequest


【解决方案1】:

不是很多。

浏览器强制限制:

  • 对给定源的并行 HTTP 请求数
  • 并行 HTTP 请求的总数(这是一个更大的限制)

如果您在更多原件之间拆分您的请求,您可能会发现您的约束从上述第一个提高到第二个。

【讨论】:

  • 我已经看到 chrome 强制执行的限制应该是 6 个最大请求,对吗?
【解决方案2】:

尝试查找有关http2 的信息,有一些info。 Http2协议对并行请求有更好的支持。

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2017-11-29
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多