【问题标题】:Maximum number of http requests using web workers使用 Web Worker 的最大 http 请求数
【发布时间】:2014-10-18 19:30:18
【问题描述】:

我知道在浏览器中一次可以发生的并发 http 连接数是有限制的......

这是一个总的、总体的浏览器限制吗?网络工作者是否也受到此限制,还是因为它们是不同的线程而受到不同的对待?

【问题讨论】:

  • 请参阅browserscope.org/?category=network 了解浏览器连接限制。
  • 所以这个页面建议每个 hostname 有 X 个连接的限制,最大 browser 限制为 Y.. 假设一个网络工作者被认为与生成它的应用程序位于同一 hostname 下,我是否正确地说 web worker 与应用程序的其余部分一起受到主机名限制?因此,如果我有 X 个网络工作者都使用 XHR 请求,那么我仍然可以阻止 UI 吗?
  • @mpickell 你不能用 WebWorker 线程阻塞 UI 线程(这就是他们的重点)。但是,是的,您可以通过让X WebWorkers 将 XHR 发送到同一主机 尝试从主 UI 线程进行同步 XHR 来阻止 UI 线程(永远不应该这样做)。另请注意,第一部分甚至不是必需的,您可以通过从主线程进行任何同步 XHR 来阻塞 UI 线程。
  • @idbehold 网络工作者计入最大浏览器连接限制(或主机名限制),对吗?我正在创建一个 Web 工作者,它进行 XHR 异步调用以获取一些数据、处理它并将结果返回给 UI 线程。我正在创建该工作人员的实例的 pool 并且可以将池设置为我想要的任意数量...但我不希望网络工作人员获取所有可能的连接并最终阻止需要建立 XHR 连接的 UI。
  • (空间不足..)我的理解是,一旦连接全部使用,任何其他尝试获取 http 连接的东西都会阻塞调用线程,直到连接可用。因此,为了将我的工作池设置为正确的数字,我试图弄清楚是否计入总连接数......我还没有遇到实际阻塞 UI 的问题,并且池数可以配置..但我试图更好地理解它。我不希望 UI XHR 在所有工作人员结束时排队并最终被阻止。

标签: javascript xmlhttprequest web-worker


【解决方案1】:

TLDR:Worker(至少在 Chrome 和 Firefox 中)似乎遵守每个主机名的全局最大连接数。

我用这段代码创建了一些工人......

/* jshint esversion: 6 */

(function() {

    'use strict';

    const iWorkerCount = 20;

    for(let i = 0; i < iWorkerCount; i++) {
        const oWorker = new Worker('/js/worker.js');
    }

}());

...然后每个工作人员向图像服务发出远程请求...

/* jshint esversion: 6 */

(function() {

    'use strict';

    const sUrl = 'https://loremflickr.com/320/240';

    fetch(sUrl).then(sResponse => {
        console.log(sResponse);
    });

}());

有一批初始请求同时完成,然后一旦最大请求数下降,剩余的请求很快就会流入

【讨论】:

    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多