Skip to content

useWebWorker

使用 Web Worker 执行后台任务的 Hook,避免阻塞主线程。

前置依赖

依赖参数

参数名类型说明
deps.WorkerWorkerConstructorWorker 构造函数
deps.setTimeouttypeof setTimeout设置定时器
deps.clearTimeouttypeof clearTimeout清除定时器

环境要求

  • 浏览器环境: 使用 Web Worker API

函数签名

typescript
function useWebWorker(
  options: WebWorkerOptions,
  deps: WebWorkerDeps
): {
  postMessage: (data: any) => void
  terminate: () => void
  status: Ref<WorkerStatus>
  error: Ref<Error | null>
}

interface WebWorkerOptions {
  scriptURL: string        // Worker 脚本 URL
  maxRetries?: number      // 最大重试次数,默认 3
  timeout?: number         // 超时时间(毫秒),默认 30000
  onMessage?: (data: any) => void
  onError?: (error: Error) => void
}

interface WebWorkerDeps {
  Worker: WorkerConstructor
  setTimeout: typeof setTimeout
  clearTimeout: typeof clearTimeout
}

type WorkerStatus = 'idle' | 'running' | 'error' | 'terminated'

参数

参数名类型必填默认值说明
options.scriptURLstring-Worker 脚本的 URL
options.maxRetriesnumber3失败后的最大重试次数
options.timeoutnumber30000超时时间(毫秒)
options.onMessagefunction-接收消息的回调
options.onErrorfunction-错误回调
depsWebWorkerDeps-依赖注入对象

返回值

类型说明
{ postMessage, terminate, status, error }Worker 控制对象

工作原理

  1. 创建 Worker:使用 scriptURL 创建 Worker 实例
  2. 状态管理:使用 ref 跟踪 Worker 状态(idle/running/error/terminated)
  3. 消息通信
    • postMessage: 向 Worker 发送消息
    • 监听 Worker 的 message 事件
    • 调用 onMessage 回调
  4. 错误处理
    • 监听 Worker 的 error 事件
    • 实现重试机制(最多 maxRetries 次)
    • 调用 onError 回调
  5. 超时控制
    • 发送消息后启动定时器
    • 超时后自动 terminate Worker
  6. 清理terminate 方法终止 Worker 并清理资源

适用于 CPU 密集型计算、大数据处理等场景。