Одиночный воркер
useWorker() — composable основного потока, оборачивает один лениво создаваемый воркер.
const { run, isRunning, progress, error, cancel, warmup } = useWorker<typeof import('./x.worker')>(
() => new Worker(new URL('./x.worker.ts', import.meta.url), { type: 'module' }),
{ idleTimeout: 30_000, retries: 0 },
)
// Опционально: заранее создать воркер, не выполняя задачу (избегает задержки холодного старта при первом запуске)
await warmup()
const output = await run(input, { transfer: [input.buffer], signal: controller.signal })Вход run() пропускается через toRaw() перед отправкой — значение ref/reactive, прочитанное прямо из компонента (() => list.value), не клонируется структурно как живой Proxy, поэтому отправляется именно сырой снапшот.
Опции
idleTimeout
number | false · по умолчанию: 30000
Воркер самозавершается после стольки мс простоя (освобождает память); следующий run() прозрачно пересоздаёт его.
retries
number · по умолчанию: 0
Автоматические повторы при отклонении — никогда не применяются к отменам (AbortError всегда отклоняется немедленно). См. Стратегия повторов с backoff.
retryDelay
(attempt: number) => number
Задержка перед каждым повтором — см. Стратегия повторов с backoff.
hardCancelOnAbort
boolean · по умолчанию: false
При abort() немедленно завершить и пересоздать воркер вместо ожидания кооперативной обработки через ctx.signal.
cache
{ cache: 'lru', maxCacheSize?: number }
Мемоизирует результаты по входным данным — см. Мемоизация / кэш результатов.
streaming
boolean · по умолчанию: false
Включает ctx.reportChunk()/chunks — см. Потоковая передача результатов.
Возвращаемое значение
run(input, options?)
(input: In, options?: { transfer?: Transferable[]; signal?: AbortSignal }) => Promise<Out>
isRunning
ComputedRef<boolean>
progress
ShallowRef<number>
error
ShallowRef<WorkerError | null>
cancel()
() => void
Отменяет текущий вызов(ы) run(), не получившие собственный signal.
warmup()
() => Promise<void>
Заранее создаёт воркер без выполнения задачи (полезно, чтобы избежать задержки холодного старта).
chunks
ShallowRef<unknown[]> | undefined
Присутствует только при streaming: true — см. Потоковая передача результатов.
Автоматический terminate() при onScopeDispose, если useWorker() вызван внутри активной effect-области.