HTML5 词条目录
前端Wiki/词条/Web Worker 多线程

Web Worker 多线程

定义把耗时计算任务放到独立后台线程执行,不阻塞主线程的 UI 渲染

JavaScript 主线程单线程,大循环会把页面卡死。new Worker(脚本路径) 能创建一个后台线程:主线程用 postMessage 发数据,worker 通过 onmessage 收数据,算完再 postMessage 回来。数据传递默认是结构化克隆,传输大 ArrayBuffer 可用 Transferable Objects 零拷贝移交所有权。

Worker 里拿不到 window、document、parent,DOM 操作全部禁止,只能做纯计算(图像处理、大数据解析、加密排序)。脚本必须同源、不能是 file:// 打开。SharedArrayBuffer 与 Atomics 可以做多线程共享内存,但需要安全的跨域隔离头部配合。

JavaScript
// 主线程:main.js
var worker = new Worker('calc.js');
worker.postMessage({ cmd: 'fib', n: 40 });
worker.onmessage = function (e) {
  console.log('后台线程算完:', e.data);
};

// 后台线程:calc.js 内容如下,独立文件运行
self.onmessage = function (e) {
  var n = e.data.n;
  var a = 0, b = 1;
  for (var i = 0; i < n; i++) { var t = a + b; a = b; b = t; }
  self.postMessage(a);
};
⚠ 常见误区
🔗 相关词条浏览器简单动画
← 返回来源章节浏览器