Воркеры
Выполняйте операции скриптов в фоновых потоках. Управляйте потоками-воркерами, обменивайтесь данными с воркерами и обрабатывайте передачу данных между воркерами и основным потоком.
Например, Worker
интерфейс AbstractWorkerEventMap
Свойства
интерфейс Worker
Интерфейс 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 Немедленно завершает работу воркера. При этом воркеру не предоставляется возможность завершить выполняемые операции: его выполнение прекращается сразу же.
интерфейс WorkerOptions
Свойства
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