【发布时间】:2021-04-19 13:50:55
【问题描述】:
Deno:v1.19.0
Deno 文档参考:Deno Manual, chapt. 3.6 Workers
MDN 网络文档:Javascript : Using Web Workers
根据上述 Deno 文档,支持 Web Workers API。从这个 API 的抽象类派生的类型是 Worker、SharedWorker 和 ServiceWorker,可以在 MDN Web Docs 链接中看到。 Dedicated Worker 似乎实现了。
使用 Dedicated Workers 似乎一切正常。
workerList[i] = new Worker(new URL(authJson.workers[i].projectFile, import.meta.url).href, { type: "module", deno: { namespace: true, }});
使用 SharedWorker 时会发生错误:ReferenceError: SharedWorker is not defined
workerList[i] = new SharedWorker(new URL(authJson.workers[i].projectFile, import.meta.url).href, { type: "module", deno: { namespace: true, }});
我过去曾看到,Deno 说某些东西是受支持的,而没有说它只是部分受支持。使用 postMessage 传递共享内存数组的示例,应该最近才使用 1.9.0。
会不会是 Deno 不支持 Web Worker API 并且只有一个 Worker 实现而没有 SharedWorker,或者对于使用上面的 SharedWorker 有什么需要了解的,但 Deno 文档中没有?
如果答案是尚不支持 Shared Worker,那么请问您在哪里找到此类信息,因为我已经阅读了完整的 Deno Worker API,虽然它引用了 MDN Web Docs,但它确实如此,除非我错了,在他们的文档中没有任何地方说他们不完全支持他们所指的由 Deno 支持的 API。
PS:在有人问之前......你为什么需要...... :)
SharedWorkers: 表示可以从多个浏览上下文访问的特定类型的工作人员,可以是多个窗口、iframe甚至工作人员。
因此 Shared Worker 可以与其他 worker 交换消息,而不仅仅是一个父节点,例如创建它们的主线程。他们有一个 MessagePort 对象。
【问题讨论】:
-
我在 denoland/deno github.com/denoland/deno/issues/3998987654323@找到了这个讨论
-
它们链接到developer.mozilla.org/en-US/docs/Web/API/Worker/Worker,这是 Worker 构造函数,而不是 developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API(注意 Web Workers 之后的“s”)。多年来,现在被称为“专用工作者”的东西被称为“网络工作者”。甚至 SO 标签web-worker 也只是关于敬业的工人。 ps:github.com/denoland/deno/issues/7728
-
@Kaiido,谢谢。我检查了您提供的链接,它回答了 SharedWorkers 目前不属于 Deno 的问题。实现它似乎取决于结构化克隆的可用性,这可能取决于本周刚刚与 Deno 1.9.0 一起发布的共享内存阵列。我会自动回答这个问题。
标签: javascript web-worker deno