深入理解 Web Worker
背景与核心概念
现代 Web 应用功能日益复杂,JavaScript 的单线程特性逐渐成为性能瓶颈。当主线程需要执行大量计算、处理密集任务时,页面容易卡顿甚至无响应。Web Worker 的出现正是为了解决这一问题,它允许将耗时任务从主线程分离,在后台独立线程中运行。
核心特性
- 并行执行:Worker 拥有独立线程,不阻塞 UI 渲染。
- 消息传递:通过
postMessage和onmessage实现线程间通信。 - 同源限制:只能加载同源的脚本资源。
- 独立作用域:拥有独立的 JavaScript 全局环境,无法直接访问 DOM。
主要类型
- Dedicated Worker(专用 Worker):一对一关系,仅能被创建它的脚本使用。
- Shared Worker(共享 Worker):一对多关系,可被多个脚本共享。
- Service Worker:主要用于网络请求拦截和缓存管理,是 PWA 的核心技术。
基础用法实战
要开始使用,首先需要创建一个单独的 JS 文件作为 Worker 脚本。
// worker.js
self.onmessage = function(e) {
const result = heavyCalculation(e.data);
self.postMessage(result);
};
function heavyCalculation(data) {
let sum = 0;
for (let i = 0; i < data; i++) {
sum += i;
}
return sum;
}
在主线程中实例化并通信:
// main.js
const worker = new Worker('worker.js');
// 发送数据
worker.postMessage(1000000);
// 接收结果
worker.onmessage = function() {
.(, e.);
};
worker. = () {
.(, e.);
};
worker.();

