全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 7 分钟 ✍️ juanwangdev

Web Worker 与多线程优化

Web Worker 在独立线程执行计算密集任务,不阻塞 UI 渲染。

Vite Worker 支持

JavaScript
// 使用 ?worker 后缀导入
import Worker from './heavy-calc.js?worker'

// 创建 Worker 实例
const worker = new Worker()

// 发送消息
worker.postMessage({ data: input })

// 接收结果
worker.onmessage = (e) => {
  console.log('Result:', e.data)
}

Worker 内联创建

JavaScript
// 内联 Worker 代码
import InlineWorker from './worker?worker&inline'

// inline Worker 不生成独立文件
// 代码内联到主 chunk

Worker 文件示例

JavaScript
// heavy-calc.js
self.onmessage = (e) => {
  const { data } = e

  // 执行复杂计算
  const result = heavyCalculation(data)

  // 返回结果
  self.postMessage(result)
}

function heavyCalculation(data) {
  // 大量计算...
  return result
}

注意:Worker 代码不能访问 DOM,只能通过消息通信。

Worker 类型

类型说明适用场景
?worker独立文件 Worker大型计算任务
?worker&inline内联 Worker小型任务
?sharedworkerSharedWorker多标签页共享

SharedWorker

JavaScript
// SharedWorker 多标签页共享
import SharedWorker from './shared.js?sharedworker'

const worker = new SharedWorker()
worker.port.onmessage = (e) => {
  console.log('Shared:', e.data)
}

使用场景

场景Worker效果
大数据处理不阻塞 UI
复杂计算多线程并行
图片处理后台处理
音视频编码实时处理

性能对比

方式UI 阻塞处理时间
主线程计算✓ 阻塞同步
Worker 计算✗ 不阻塞异步

Worker 销毁

JavaScript
// 任务完成后销毁
worker.onmessage = (e) => {
  console.log(e.data)
  worker.terminate()  # 销毁 Worker
}

要点总结

  • ?worker 导入创建 Worker
  • Worker 在独立线程执行计算
  • 不能访问 DOM,通过消息通信
  • sharedworker 多标签页共享

📝 发现内容有误?点击此处直接编辑

← 上一篇 Tree Shaking 深度优化
下一篇 → 动态导入与懒加载策略
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库