Web Worker:前端多线程开发的隐形引擎
为什么需要 Web Worker
JavaScript 是单线程的,就像一个工人同时只能做一件事。你让他画页面,他就画;你让他算数据,他就算。如果同时让他画又让他算,界面就会卡死。
Web Worker 的作用相当于给 JavaScript 请了多个打工人来做那些不需要碰 UI 的任务。简单来说,它就是浏览器中的子线程,能让我们把耗时操作(比如复杂计算、数据处理)丢到后台执行,主线程只负责 UI 渲染和交互,两边互不打扰。
- Worker 无法直接操作 DOM。
- Worker 和主线程靠 postMessage 通信。
- Worker 是完全独立的执行环境,有自己的全局作用域。
总结来说就是能并行执行代码,不会卡住界面,并且通信机制简单。常用来解决重 CPU 运算的前端任务,比如处理海量数据运算时,网页需要设置计算机的核心数来获取最快的计算速度,就绕不开使用 Web Worker。
基本使用方法
来看一个最简单的 Web Worker 例子。
创建 Worker 文件
新建一个 worker.js 文件:
// worker.js
self.onmessage = function(e) {
console.log('子线程收到:', e.data);
const result = heavyComputation(e.data);
self.postMessage(result); // 把结果发回主线程
};
function heavyComputation(input) {
// 模拟一个超耗时的计算
let sum = 0;
for (let i = 0; i < 1e9; i++) {
sum += input;
}
return sum;
}
主线程引入并使用
在主线程中引入并调用:
const worker = new Worker('worker.js');
worker.postMessage(10); // 给子线程发消息
worker.onmessage = () {
.(, e.);
};


