new worker() 创建独立线程的 web worker,必须传入外部 js 文件路径;worker 中用 self.onmessage 接收消息、self.postmessage 发送消息,不可访问 dom,但支持 fetch、settimeout 等 api。

在 JavaScript 中,new Worker() 用于创建一个独立于主线程运行的 Web Worker,它能在后台执行脚本,避免阻塞 UI 渲染和用户交互。
必须使用外部 JS 文件
Web Worker 不能直接执行内联代码或字符串(比如 new Worker("console.log(1)") 是非法的)。你必须把要运行的逻辑写在一个单独的 .js 文件中,然后传入该文件的 URL:
- ✅ 正确:
const worker = new Worker("./task.js"); - ❌ 错误:
new Worker("console.log('hi')");或new Worker(() => {...})
Worker 文件里用 self 或 this 接收/发送消息
在 task.js 中,不能访问 window、document 等 DOM 对象,但可以使用 self(或 this)来监听主线程发来的消息,并通过 postMessage() 回传结果:
// task.js
self.onmessage = function(e) {
const data = e.data;
// 做一些耗时计算,比如大数组排序
const result = data.map(x => x * 2);
self.postMessage(result); // 发回主线程
};
主线程与 Worker 双向通信
主线程用 worker.postMessage() 发送数据,用 worker.onmessage 接收返回:
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
const worker = new Worker("./task.js");
<p>worker.postMessage([1, 2, 3, 4]); // 发送数据</p><p>worker.onmessage = function(e) {
console.log("Worker 返回:", e.data); // [2, 4, 6, 8]
};</p><p>// 可选:监听错误
worker.onerror = function(e) {
console.error("Worker 出错:", e.message);
};</p>
注意作用域和资源限制
Worker 运行在独立上下文中,以下内容不可用:
- DOM API(
document、Element、localStorage等) -
window、parent、frameElement - 部分全局变量(如
alert、fetch✅ 可用,XMLHttpRequest✅ 可用)
但支持 setTimeout、Promise、fetch、importScripts()(加载其他 JS 脚本)等。
不复杂但容易忽略。只要路径对、通信方式对、不碰 DOM,就能稳定跑起来。










