Worker 是浏览器提供的多线程机制,用于在后台线程执行耗时任务以避免阻塞主线程;需独立 JS 文件,通过 postMessage/onmessage 通信,数据经序列化复制传递。

JavaScript 的 Worker 是浏览器提供的多线程机制,它让耗时任务(如大量计算、数据处理、加密解密)在后台线程中运行,不占用主线程,从而避免阻塞页面渲染和用户交互。
Worker 需要将逻辑写在独立的 JS 文件中,通过 new Worker() 实例化并通信。主线程和 Worker 之间不能共享变量或 DOM,只能靠 postMessage() 和 onmessage 传递数据(序列化后复制,不是引用)。
self.onmessage = function(e) {
const data = e.data;
// 模拟耗时计算
let result = 0;
for (let i = 0; i < data * 1000000; i++) {
result += i;
}
self.postMessage({ result });
};const worker = new Worker('worker.js');
<p>worker.onmessage = function(e) {
console.log('计算结果:', e.data.result);
};</p><p>worker.postMessage(100); // 向 worker 发送数据Worker 支持结构化克隆(structured clone),可传普通对象、数组、Map、Set、Date、RegExp 等(但不能传函数、DOM 节点、undefined)。对超大数组,建议启用 Transferable Objects 提升性能——把 ArrayBuffer 或 TypedArray 的所有权转移过去,避免拷贝:
立即学习“Java免费学习笔记(深入)”;
const buffer = new ArrayBuffer(1024 * 1024);
const array = new Uint8Array(buffer);
// 填充数据...
worker.postMessage({ data: array }, [buffer]); // 第二个参数表示转移worker.onerror 或在 worker 内用 self.onerror 处理。worker.terminate(),否则线程会持续运行,浪费资源。现代浏览器支持以模块方式加载 Worker(需服务端支持 CORS):
import 引入其他模块;
const worker = new Worker('worker.mjs', { type: 'module' });import.meta.url、动态 import 等特性,更利于组织复杂逻辑。以上就是javascript Worker怎么用_如何实现多线程编程来避免界面阻塞?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号