Deno Web Worker API - SharedWorker
Posted
技术标签:
【中文标题】Deno Web Worker API - SharedWorker【英文标题】: 【发布时间】: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 一起发布的共享内存阵列。我会自动回答这个问题。 【参考方案1】:来自 Worker API 的 SharedWorkers 没有在 Deno 中实现,只有 Dedidcated Workers 是。
根据this issue 7728 discussion SharedWorkers 要求结构化克隆可用。
根据this discussion 的说法,结构化克隆的工作已经有一段时间了。
使用 postMessage 在线程之间传递 SMA 仅在 Deno 1.9.0 之后才可用。 可能传递 MessagePort 对象(SharedWorkers 中需要)可能基于该能力(推测)。
但是,Deno 代码中的 SharedWorker 类型已经是 declared here。
如果有人可以添加有关 SharedWorkers 可用性的更多信息,请分享。 它们在多线程编程、模块化和平滑处理方面非常有用。
【讨论】:
以上是关于Deno Web Worker API - SharedWorker的主要内容,如果未能解决你的问题,请参考以下文章