JavaScript 是单线程的,就像一个人同时只能做一件事。如果主线程既要渲染页面又要处理复杂计算,界面就会卡死。Web Worker 的作用就是给 JavaScript 请了多个'打工人'来处理不需要碰 UI 的任务,让主线程只负责交互和渲染。
简单来说,Web Worker 就是浏览器中的子线程。它能让我们把耗时操作(比如复杂计算、数据处理)丢到后台执行,两边互不打扰。不过要注意,Worker 无法直接操作 DOM,且完全独立于主线程,拥有自己的全局作用域,两者通过 postMessage 通信。
基本使用方法
来看一个最简单的例子。首先创建一个独立的 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 文件,且子线程无法操作 DOM,只能做纯计算或数据处理。


