Web Workers 入门指南


Web Workers 允许在独立的线程中运行 JavaScript 代码,不会阻塞主线程的 UI 渲染。

创建 Web Worker

// worker.js
self.onmessage = function(e) {
  const result = e.data * 2;
  postMessage(result);
};

使用 Web Worker

// 主线程
const worker = new Worker('worker.js');

worker.onmessage = function(e) {
  console.log('收到结果:', e.data);
};

worker.postMessage(10); // 发送消息

实际应用示例

计算密集型任务

// heavy-task.js
self.onmessage = function(e) {
  const { start, end } = e.data;
  let sum = 0;
  for (let i = start; i <= end; i++) {
    sum += i;
  }
  postMessage(sum);
};
// 主线程使用
const worker = new Worker('heavy-task.js');

worker.onmessage = function(e) {
  console.log('计算结果:', e.data);
  worker.terminate(); // 终止 worker
};

worker.postMessage({ start: 1, end: 1000000 });

终止 Worker

worker.terminate();

错误处理

worker.onerror = function(e) {
  console.error('Worker 错误:', e.message);
};

限制

  • 不能直接操作 DOM
  • 不能使用 window/document 对象
  • 只能访问部分 Web API(如 XMLHttpRequest、fetch)

更多详情请参考 MDN Web Workers