问题标签 [web-worker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
175 浏览

javascript - 识别 JS 脚本何时作为 Worker 运行

我有一个脚本可以直接运行,或者在浏览器中可用时作为 Web Worker 运行。我只想在作为工作人员运行时运行此脚本的一部分;所以我的问题是,脚本如何将自己标识为以这种方式运行?

我在规范中看不到任何允许这种情况发生的东西;我错过了一些明显的东西吗?

0 投票
1 回答
463 浏览

javascript - 为什么在定义对象时不能在 (JavaScript) Worker 中使用它?

来自 Java (OOP) 世界,我习惯于类、继承和多线程。现在,对于我在 JavaScript 领域的小小旅行,我尝试在适用的情况下利用这些范式和模式。阅读:使用原型(“类”/对象)和 WebWorkers 进行并行执行。但是,这种情况不起作用...

启动工作人员的 HTML 站点:

HTML 调用的 Worker(“worker.js”):

工人调用的处理程序(“handler.js”):

JavaScript 原型设计和“继承”是否意味着以这种方式工作?我应该总是使用原型属性而不是这个吗?如果我想访问 this.myProperty 而不是函数怎么办?

另外:是否有任何合理的方法可以将 this 绑定到构造函数中的 Handler 实例?至少代码没有被冗长的 Handler.prototype 引用弄得乱七八糟。

谢谢!

0 投票
0 回答
1224 浏览

javascript - 汇集网络工作者

有谁知道用于汇集 Web Worker 的良好模式/库?

我希望能够执行以下操作:

  • 设置最大线程数。
  • 我第一次要求 Worker 时,它会创建一个新的。
  • 下一次它将返回前一个 Worker,除非它仍在完成操作,在这种情况下,它将创建一个新的并返回它。
  • 一旦我们达到最大值,它就会开始对工作人员的请求进行排队,并在工作人员可用时启动它们。
  • 这目前假设池都将使用相同的 .js 文件。

或者有更好的方法吗?

0 投票
2 回答
2676 浏览

javascript - 有没有办法将 Web Worker 设置为低优先级?

我正在考虑在用户浏览我的网站时使用 Web Workers 提供一些后台功能(这就是 Web Workers 的用途,对吧?)。但是,我不想冒险通过导致延迟滚动、无响应的控件等来影响用户体验。Web Worker 映射在 OS 线程上,因此我希望对这些线程的优先级进行一些控制,但到目前为止据我所知,当前的 API 中没有这样的东西。你知道如何做到这一点吗?即使有黑客攻击?

0 投票
1 回答
2370 浏览

jquery - IOS 上的 HTML5 和 Web Worker

我正在使用 jQuery 和 HTML5 构建 IOS 应用程序。最近我了解到HTML5 Web Workers为 Javascript 执行多线程编程提供了极大的灵活性,这非常棒。

那么,IOS 是否支持 Web Worker,如何将它们添加到我的 IOS 应用程序中?

0 投票
1 回答
783 浏览

javascript - 网络工作者没有在 Firefox 10 中生成子工作者

我一直在尝试在 Firefox 10 中使用网络工作者。Mozilla 网站上的示例计算斐波那契数(在本例中为第 5 个斐波那契数 - 5):

https://developer.mozilla.org/En/Using_web_workers#section_11

当我单击链接转到示例页面时:https ://developer.mozilla.org/samples/workers/fibonacci/ 我得到正确的输出 5。当我将源代码复制并粘贴到我的新文件中时桌面,以及相关的工作脚本(fibonacci.js),它不会超过第三个数字(即worker.postMessage(“3”);)。我试过从我的网络服务器上运行它,结果相同。

可能是什么问题?

0 投票
1 回答
516 浏览

javascript - 有没有人在 JavaScript 中使用 webworkers 并行化进行过大型搜索?

我正在用 JavaScript 编写一个高度可并行化的搜索函数,并且可以对大量数据集进行操作。数据集存储在 JS 对象的树中,可以通过将搜索划分为 Web Worker 来实现。

有人知道做类似事情的产品和/或研究吗?我想阅读一些在实现路径上走得太远的经验,但谷歌搜索完全没有帮助。

0 投票
1 回答
1524 浏览

javascript - JavaScript:使用队列进行网络通信

我正在开发一个客户端必须能够通过 WebSockets 与服务器通信的项目。由于我们开发的应用程序对用户输入具有高度响应性,因此我们决定让 WebWorker 通过网络进行所有通信,这样慢速连接就不会中断 GUI。到目前为止效果很好。

现在我们考虑在网络速度慢且要发送的消息量很大的情况下进行必要的优化。由于这些消息中的大多数仅用于同步其他一些客户端用户界面,因此我们可以在必要时删除其中的一些。但要做到这一点,我们需要能够检测拥塞时的情况。

我们提出了队列的想法:每条要发送的消息都被推送到一个队列中,WebWorker 除了永久地遍历队列并发送它在那里找到的所有消息之外什么都不做。这样,如果队列中有一定数量的元素(即消息发送太慢),我们稍后可以让 Worker 采取不同的行动。这个想法简单明了,但实现起来似乎并非如此。

如您所见,worker 在收到消息后立即创建 WebSocket。然后它执行函数 processMessageQueue(),这是一个循环,通过 WebSocket 发送数据来永久清空队列。现在,我的问题是似乎不可能将消息推送到队列中。当“SEND”类型的消息到达但它不能因为 Worker 太忙而无法处理任何事件时,应该会发生这种情况。所以它可以循环队列或推送消息,而不是两者兼而有之。

我需要的是一种以某种方式将数据推送到此队列的方法。如果这不容易实现,我想知道是否有人可以想出另一种方法来找出消息何时到达更快然后发送。有什么提示吗?

提前致谢!

0 投票
3 回答
4868 浏览

javascript - 处理 imageData 的 Web 工作者使用 Firefox 但不是 Chrome

当我运行处理将 imageData 传递给网络工作者然后返回的代码时,Firefox 运行良好,但 Chrome 给出“未捕获的错误:DATA_CLONE_ERR:DOM Exception 25”

搜索谷歌表明旧版本的 Chrome 曾经可以工作?

我又检查了一些,似乎我需要在发送图像数据之前对其运行 JSON.stringify 和 JSON.parse ,但随后它在任何地方都停止工作。在 FF 9 中工作的代码是:

图像.js:

工人.js:

为了在应用程序和网络工作者之间来回发送此图像数据,我应该使用什么方法?

谢谢!

编辑:

如果我复制到常规数组,则 Chrome 开始工作......

因此 chrome 无法将 CanvasPixelArray 传递给工作人员,但它可以传递常规数组。但是火狐可以。

0 投票
1 回答
3855 浏览

firefox - Firefox 的 WebWorkers 和 WebSockets

我正在尝试在 WebWorker 中实现有效的 WebSocket 连接。这应该很简单,如果我将 Chrome 用作 b rowser。然而,由于这个实验应该进一步成为产品的一部分,我需要它在所有伟大的浏览器上工作,也就是 Firefox。

我的问题是我无法让它与 Firefox 一起使用。起初 Firefox 无法创建 WebWorker。那是一个错误,已在版本 9 中修复。但现在似乎无法在 Worker 中创建 WebSocket。

我尝试了以下代码行:

失败了:

好吧,根据这个它应该可以工作。但它没有,无论是在 WebWorker 内部还是在这个上下文之外。我试过旧的

这似乎在 WebWorker 之外工作,但我得到与上面相同的错误。

现在,有什么问题?我知道 WebSockets 在某些旧版本中默认禁用,但版本 9 应该支持与 Chrome 类似的功能(至少他们是这么说的)。那我做错了吗?

我使用的是 Ubuntu 11.10,还没有测试其他浏览器。

提前致谢!