Обработчик воркера
defineWorkerHandler() — сторона воркера. Автоматически подключает протокол сообщений run/cancel — вам нужно написать только саму функцию-обработчик.
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) => void — value в диапазоне 0..1
Отправляет прогресс на основной поток, ограничено ~20 сообщениями/сек.
transfer(...transferables)
(...transferables: Transferable[]) => void
Помечает объекты для отправки обратно с результатом без копирования (zero-copy) вместо структурного клонирования — см. Передача владения.
reportChunk(chunk)
(chunk: unknown) => void
Отправляет промежуточный результат без ограничения частоты — см. Потоковая передача результатов.