Skip to content

Справочник ​

Архитектура ​

vue-worker-kit
│
├── defineWorkerHandler()   (vue-worker-kit/worker)
│     Подключает протокол сообщений run/cancel; запускает цикл обработки
│     только внутри Dedicated-/SharedWorkerGlobalScope, иначе — no-op
│     Фантомно типизированный маркер __input/__output — считывается
│     useWorker/createWorkerPool/useWorkerComputed через условный тип
│
├── useWorker()             (основная точка входа)
│     Лениво создаёт один воркер через переданную фабрику
│     idleTimeout / retries / retryDelay / hardCancelOnAbort / cache / streaming
│     Автозавершение через onScopeDispose внутри setup(), плюс публичный terminate()
│
├── createWorkerPool() / useWorkerPool()   (vue-worker-kit/pool)
│     Лениво создаёт до `size` воркеров по мере поступления задач
│     pool.run() / pool.map() с ограниченным параллелизмом + передачей по элементу
│     Callback'и onProgress / onChunk на run()/map() для прогресса и стриминга по задаче
│
├── useWorkerComputed()     (vue-worker-kit/computed)
│     computed(), перезапускающий воркер при изменении реактивного источника
│     Обработка гонок через номера поколений — устаревшие результаты отбрасываются молча
│
├── useSharedWorker()       (vue-worker-kit/shared)
│     Оборачивает одно соединение SharedWorker, общее для всех вкладок/окон
│     connect() / disconnect() — весь жизненный цикл целиком (нет idleTimeout)
│
└── Devtools                (vue-worker-kit/devtools)
      createWorkerActivityMonitor() + <WorkerActivityPanel> — реактивно,
      на основе подписки (без опроса), без зависимости от @vue/devtools-api

Поддержка бандлеров. Не нужны worker-loader/worker-plugin или другие обходные пути эпохи webpack — используется нативный ESM-импорт воркера (new URL('./x.worker.ts', import.meta.url) + { type: 'module' }), который Vite (и Nuxt 3/4) подхватывает и автоматически собирает в отдельный чанк. Если вы на классическом Webpack (Vue CLI), понадобится worker-plugin или аналог — это ограничение бандлера, а не этого пакета.

Совместимость с SSR ​

useWorker/useWorkerComputed/useWorkerPool безопасно вызывать в setup() на сервере — конструктор передаётся как фабрика (() => new Worker(...)) и вызывается только внутри run(), то есть в обычном сценарии только на клиенте. Если run() всё же вызван во время SSR, вы получите WorkerUnavailableError с понятным сообщением, а не падение. Защищайте клиентский код через <ClientOnly> в Nuxt:

vue
<ClientOnly>
  <ProgressBar v-if="isRunning" :value="progress" />
</ClientOnly>

Размер бандла и peer-зависимости ​

Точка входаPeer-зависимостиЗаметки
vue-worker-kitvue ^3.4 (обязательна)Основная точка входа — useWorker()
vue-worker-kit/workervue ^3.4 (обязательна)defineWorkerHandler() — сторона воркера
vue-worker-kit/poolvue ^3.4 (обязательна)createWorkerPool()/useWorkerPool()
vue-worker-kit/computedvue ^3.4 (обязательна)useWorkerComputed()
vue-worker-kit/sharedvue ^3.4 (обязательна)useSharedWorker()
vue-worker-kit/devtoolsvue ^3.4 (обязательна)Отладочная панель, без зависимости @vue/devtools-api

Никаких зависимостей, кроме peer-зависимости vue — ни на одной точке входа нет других runtime-зависимостей. sideEffects: false; каждая точка входа — свой чанк, импорт одной не тянет за собой остальные.

Сравнение ​

vue-worker (последняя версия 1.2.1, опубликована в 2017) и vue-web-workers (последняя версия 0.2.0, опубликована в 2020, напрямую зависит от vue@^2.6.11) — оба фактически неподдерживаемые плагины Vue 2 — проверено по реестру npm, а не по памяти. Comlink (4.4.2, всё ещё активно поддерживается, без зависимостей) — надёжный, Vue-агностичный RPC-слой.

vue-worker / vue-web-workersComlinkvue-worker-kit
Composition API✗— (не специфичен для Vue)✓
Типизированные вход/выход✗вручную wrap<T>()выводится из файла воркера
Пул воркеров✗✗✓ (createWorkerPool, pool.map с передачей по элементу)
Реактивный computed-в-воркере✗✗✓ (useWorkerComputed)
SharedWorker (мультивкладочный)✗✗✓ (useSharedWorker)
Потоковые результаты✗✗✓ (ctx.reportChunk, chunks.value)
Отмена✗✗✓ (AbortSignal, на задачу + глобально для пула)
Transferables✗✓ (вручную, в обе стороны)✓ (RunOptions.transfer внутрь, ctx.transfer() наружу, по элементу для pool.map)
Прогрев воркера✗✗✓ (warmup() для одиночного воркера и пула)
Повторы с backoff✗✗✓ (настраиваемая функция задержки)
Кэширование результатов (LRU)✗✗✓ (cache: 'lru', maxCacheSize)
Безопасен для SSR✗—✓
Зависимости—нетнет, кроме vue

Лицензия ​

MIT