Типобезопасные composables для Web Worker'ов во Vue 3 — useWorker(), пул воркеров и реактивный useWorkerComputed(), с типами, выводимыми прямо из файла воркера.

useWorker запускает тяжёлые синхронные задачи (сортировка, парсинг, обработка изображений) в настоящем системном потоке (Worker). Основной поток остаётся свободным для рендеринга и обработки событий — UI не тормозит даже при выполнении сложных расчётов, которые на главном потоке вызывали бы заметные фризы.
createWorkerPool создаёт пул воркеров, распределяя задачи между ними с ограничением параллелизма. Метод pool.map обрабатывает массивы данных конкурентно, сохраняя порядок результатов — это даёт реальное ускорение на многоядерных системах за счёт параллельного выполнения на нескольких CPU-ядрах одновременно, особенно эффективно для пакетной обработки изображений или расчётов.
useWorkerComputed работает как reactive computed, но все тяжёлые пересчёты выполняются внутри воркера. При изменении зависимостей (например, вводимого текста) старый вычисляемый запуск автоматически отменяется, а новый стартует с дебаунсом. Результат всегда актуален, при этом основной поток не блокируется даже при частых изменениях источника.
Типы входных и выходных данных выводятся автоматически из самого файла воркера через typeof import. Вам не нужно описывать их дважды — ни в воркере, ни на стороне вызова. Это даёт полную типобезопасность, автодополнение и проверку на этапе компиляции, не создавая лишнего связующего кода между главным потоком и воркером.
Передавайте большие бинарные данные (ArrayBuffer, OffscreenCanvas) без копирования через transferables. Получайте промежуточные результаты через стриминг (reportChunk) для прогрессивного рендеринга. Включайте LRU-кэширование для повторяющихся вычислений и автоматические ретраи с экспоненциальной задержкой для аварийно устойчивых операций. Встроенная DevTools-панель показывает состояние пула и задачи.