javascript - 取消单个 Webworker 事件

标签 javascript web-worker

是否可以取消对 worker.postMessage(..) 调用的单个操作的处理? ? 有 worker.terminate()方法,但它会取消任何等待事件。而且它似乎让整个 worker 都死了,因为它对进一步的 react 没有反应 postMessage电话。

另一方面,创建一个新的Worker似乎没用对于每个任务,如果它们对大量公共(public)数据进行操作,则必须从 Worker 遍历这些数据至 Worker通过主脚本,每次都克隆整个数据。

最佳答案

确实 worker.terminate() 杀死了线程。由于与 WebWorker 相关的内存和 CPU 开销相当大,因此这一事实可能代价高昂。

处理单个事件取消的方法是在 postMessage 回调中托管某种 Controller 逻辑。您的工作人员可以有状态,因此您必须在内部跟踪该状态并使用该信号量停止或启动进程。

一种方法可能是创建一个共享 Worker,它甚至可以跨选项卡使用,然后让该共享 Worker 在必要时处理您的其他线程。

关于javascript - 取消单个 Webworker 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041175/

相关文章:

javascript - 显示任意数字输入的数据

javascript - JS循环遍历数组来改变段落的innerHTML

javascript - 我如何在 npm 中 require() 网络 worker ?

javascript - 是否可以使用网络 worker 优化两个脚本?

javascript - 我可以使用 Web Workers 做什么?

JavaScript 最佳实践使用

javascript - `cannot read property ‘setDirtyAttribute’ 为 null ` even if you use ` YourModel.create({…}) ` in ` ember-typescript-cli`

javascript - 使用 Knockout 进行部分 View 的对象列表

javascript - HTML5 网络 worker 通信

javascript - 使用 Vue.Js 在 Web Worker 中正确触发函数