Web Worker:前端多线程的隐形引擎
JavaScript 是单线程的,就像一个人同时只能做一件事。如果主线程在画页面,又让你算数据,界面就会卡死。Web Worker 就是给 JS 请了多个'打工人',帮主线程分担那些不需要碰 UI 的耗时任务。
核心机制
Web Worker 本质上是浏览器提供的子线程。它能让我们把复杂计算或数据处理丢到后台执行,主线程只管渲染和交互。
- Worker 无法直接操作 DOM。
- 通信通过
postMessage进行。 - 拥有独立的全局作用域。
这种并行执行能力常用于解决重 CPU 运算的前端任务,比如海量数据排序、音视频处理等。
基本用法
创建一个独立的 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 = function(e) {
console.log('主线程收到结果:', e.data);
};
这样主线程就不会因为计算被阻塞,页面依然流畅。注意 Worker 必须是单独的 JS 文件。


