Skip to content

Обработчик воркера

defineWorkerHandler() — сторона воркера. Автоматически подключает протокол сообщений run/cancel — вам нужно написать только саму функцию-обработчик.

ts
import { defineWorkerHandler, type WorkerContext } from 'vue-worker-kit/worker'

export default defineWorkerHandler(async (input: In, ctx: WorkerContext): Promise<Out> => {
  // ...
})

defineWorkerHandler запускает цикл обработки сообщений только тогда, когда действительно выполняется в глобальной области выделенного или общего воркера (проверяется через self instanceof DedicatedWorkerGlobalScope/SharedWorkerGlobalScope). Импорт этого файла где-либо ещё — например, случайно из основного бандла — ничего не делает. Один и тот же файл работает и с new Worker(...) (через useWorker()/createWorkerPool()), и с new SharedWorker(...) (через useSharedWorker()).

Вызывать reportProgress(1) самостоятельно перед возвратом не нужно — финальное, не ограниченное по частоте обновление прогресса до 1 всегда отправляется прямо перед результатом, независимо от того, каким был последний ограниченный вызов. Без этого обработчик, который сообщает прогресс только в контрольных точках (например, каждые 5%), мог бы навсегда оставить progress основного потока застрявшим ниже 1, поскольку контрольная точка, ближайшая к концу, может попасть в окно ограничения предыдущего вызова и незаметно потеряться.

Контекст (WorkerContext)

Второй аргумент, который получает функция-обработчик.

signal

AbortSignal

Срабатывает, когда задача отменена с основного потока — проверка опциональна, отмена кооперативная.

reportProgress(value)

(value: number) => voidvalue в диапазоне 0..1

Отправляет прогресс на основной поток, ограничено ~20 сообщениями/сек.

transfer(...transferables)

(...transferables: Transferable[]) => void

Помечает объекты для отправки обратно с результатом без копирования (zero-copy) вместо структурного клонирования — см. Передача владения.

reportChunk(chunk)

(chunk: unknown) => void

Отправляет промежуточный результат без ограничения частоты — см. Потоковая передача результатов.