Spec-Zone.ru › Deno 2

Воркеры

Выполняйте операции скриптов в фоновых потоках. Управляйте потоками-воркерами, обменивайтесь данными с воркерами и обрабатывайте передачу данных между воркерами и основным потоком.

Например, Worker


интерфейс AbstractWorkerEventMap

Свойства

error: ErrorEvent

интерфейс Worker

расширяет EventTarget

Интерфейс Worker представляет фоновую задачу, которую можно создать с помощью конструктора new Worker(). Воркеры выполняются в отдельном потоке, что позволяет выполнять задачи параллельно, не блокируя основной поток.

Воркеры можно использовать, чтобы:

  • Выполнять вычисления, интенсивно использующие процессор
  • Обрабатывать большие наборы данных
  • Выполнять задачи параллельно с основным потоком исполнения
  • Запускать изолированный код с собственным циклом обработки событий

Примеры

// Creating a basic worker (main.ts)
const worker = new Worker(new URL("./worker.ts", import.meta.url).href, {
  type: "module"
});

// Send data to the worker
worker.postMessage({ command: "start", data: [1, 2, 3, 4] });

// Receive messages from the worker
worker.onmessage = (e) => {
  console.log("Result from worker:", e.data);
  worker.terminate(); // Stop the worker when done
};

// Handle worker errors
worker.onerror = (e) => {
  console.error("Worker error:", e.message);
};
// Worker file (worker.ts)
// Worker context: self refers to the worker's global scope
self.onmessage = (e) => {
  if (e.data.command === "start") {
    // Perform calculation with the data
    const result = e.data.data.reduce((sum, num) => sum + num, 0);
    // Send result back to main thread
    self.postMessage(result);
  }
};

Свойства

onerror: ((
this: Worker,
e: ErrorEvent,
) => any) | null

Обработчик событий ошибок. Вызывается при возникновении ошибки в контексте выполнения воркера.

onmessage: ((
this: Worker,
e: MessageEvent,
) => any) | null

Обработчик событий сообщений. Вызывается, когда воркер отправляет данные обратно в основной поток.

onmessageerror: ((
this: Worker,
e: MessageEvent,
) => any) | null

Обработчик событий ошибок сообщений. Вызывается, когда сообщение не удаётся десериализовать.

Методы

postMessage(
message: any,
transfer: Transferable[],
): void

Отправляет сообщение воркеру, передавая ему право собственности на указанные передаваемые объекты.

postMessage(
message: any,
options?: StructuredSerializeOptions,
): void

Отправляет сообщение воркеру.

addEventListener<K extends keyof WorkerEventMap>(
type: K,
listener: (
this: Worker,
ev: WorkerEventMap[K],
) => any
,
options?: boolean | AddEventListenerOptions,
): void

Добавляет прослушиватель событий для воркера.

addEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | AddEventListenerOptions,
): void

Добавляет прослушиватель событий для событий, значение атрибута type которых совпадает с type.

removeEventListener<K extends keyof WorkerEventMap>(
type: K,
listener: (
this: Worker,
ev: WorkerEventMap[K],
) => any
,
options?: boolean | EventListenerOptions,
): void

Удаляет прослушиватель событий для воркера.

removeEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | EventListenerOptions,
): void

Удаляет прослушиватель событий для воркера.

terminate(): void

Немедленно завершает работу воркера. При этом воркеру не предоставляется возможность завершить выполняемые операции: его выполнение прекращается сразу же.

переменная Worker

Конструктор Worker создаёт новый объект Worker, выполняющий код в отдельном потоке.

Воркеры могут импортировать модули ES, если при их создании указан параметр type: "module".

Свойства

prototype: Worker
только для чтения

интерфейс WorkerEventMap

расширяет AbstractWorkerEventMap

Свойства

message: MessageEvent
messageerror: MessageEvent

интерфейс WorkerOptions

нестабильно

Свойства

type: "classic" | "module"
необязательный
name: string
необязательный

Свойства

deno: { permissions?: Deno.PermissionOptions; }
необязательный

Настройте разрешения, чтобы изменить уровень доступа воркера. По умолчанию он наследует разрешения. Обратите внимание, что разрешения воркера не могут выходить за пределы разрешений его родительского потока.

  • "inherit" использует поведение по умолчанию и получает разрешения потока, в котором создан воркер
  • "none" не имеет разрешений
  • Можно указать список путей относительно файла, в котором создан воркер, чтобы ограничить его доступ (только разрешения на чтение и запись)

Пример:

// mod.ts
const worker = new Worker(
  new URL("deno_worker.ts", import.meta.url).href, {
    type: "module",
    deno: {
      permissions: {
        read: true,
      },
    },
  }
);

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/web/workers

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API