deno.com

Web Worker

在 Github 上编辑

Worker 是在主线程之外运行 javascript 的唯一方法。 这对于各种程序都很有用,特别是那些需要进行大量计算而又不想阻塞线程的程序。

首先,我们将定义一个 Web Worker,我们可以接收来自主线程的消息,并根据这些消息执行一些处理。
./worker.ts
self.onmessage = async (e) => {
  const { filename } = e.data;
  const text = await Deno.readTextFile(filename);
  console.log(text);
  self.close();
};
目前,Deno 仅支持模块类型的 Worker。 要实例化一个 Worker,我们可以使用类似于 Web 上使用的语法。
./main.ts
const worker = new Worker(
  new URL("./worker.ts", import.meta.url).href,
  {
    type: "module",
  },
);
我们可以使用 `postMessage` 方法向 Worker 发送消息
./main.ts
worker.postMessage({ filename: "./log.txt" });
默认情况下,Worker 继承实例化它的线程的权限。 我们可以使用 deno.permissions 选项为 Worker 提供某些权限。
./main.ts
const worker2 = new Worker(
  new URL("./worker.ts", import.meta.url).href,
  {
    type: "module",
    deno: {
      permissions: {
        read: [
          new URL("./file_1.txt", import.meta.url),
          new URL("./file_2.txt", import.meta.url),
        ],
      },
    },
  },
);
因为我们使用特定权限实例化了这个 Worker,这将导致 Worker 尝试读取它无权访问的文件,从而抛出权限错误。
./main.ts
worker2.postMessage({ filename: "./log.txt" });

您找到所需的内容了吗?

隐私政策