讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

Seko
Seko

AI短剧一键生成成片

javascript如何实现web workers_它们如何通信

大强酱_4220

大强酱_4220

发布时间:2026-01-01 23:27:08

|

381人浏览过

|

来源于php中文网

原创

Web Workers允许JavaScript在后台线程运行而不阻塞主线程,需通过外部同源JS文件创建,拥有独立执行环境(无DOM、localStorage等),通信仅依赖postMessage/onmessage异步消息传递,支持结构化克隆与ArrayBuffer转移,可调用worker.terminate()或self.close()终止,常见类型为Dedicated Worker(一对一)和Shared Worker(多页面共享)。

javascript如何实现web workers_它们如何通信

Web Workers 让 JavaScript 能在后台线程中运行脚本,不阻塞主线程(比如页面渲染、用户交互)。实现它不难,关键在于理解“独立执行环境”和“基于消息的通信”这两个核心点。

如何创建并启动一个 Web Worker

Worker 必须从外部 JS 文件加载(不能是内联脚本),且同源。浏览器会为它分配独立的全局上下文(self 代替 window),没有 DOM、document 或 localStorage 等 API。

  • 新建一个文件,例如 worker.js,写入要后台执行的逻辑:


self.onmessage = function(e) {<br>
  const result = e.data * 2;<br>
  self.postMessage(result);<br>
};

  • 在主页面中创建 Worker 实例并发送消息:


const worker = new Worker('worker.js');<br>
worker.postMessage(42); // 发送数字 42<br>
worker.onmessage = function(e) {<br>
  console.log('收到结果:', e.data); // 输出 84<br>
};

主线程与 Worker 之间如何通信

通信只能通过 postMessage() 和 onmessage 进行,**是异步、事件驱动、纯消息传递**,不共享内存。所有数据都会被结构化克隆(structured clone),意味着大多数基本类型、数组、对象、Map、Set 等可传,但函数、DOM 节点、undefined、Symbol 等不行。

  • 发送消息用 worker.postMessage(data) 或 self.postMessage(data)
  • 监听消息统一用 onmessage = function(e) { ... },其中 e.data 是传来的数据
  • 支持传输 ArrayBuffer 等可转移对象(transferable),大幅提升大数据量处理效率(如图像、音频):

// 主线程中发送并转移 ArrayBuffer<br>
const buffer = new ArrayBuffer(1024);<br>
worker.postMessage(buffer, [buffer]); // 第二个参数表示转移所有权

注意:一旦转移,原上下文不能再访问该 buffer。

立即学习“Java免费学习笔记(深入)”;

cn-json-diff
cn-json-diff

比较两个 JSON 文件并显示差异。支持嵌套结构、数组及值变更。纯 Python 标准库实现,无需 API 密钥。

下载

如何终止 Worker

避免内存泄漏或无用运行,记得及时关闭。

  • 主线程调用 worker.terminate() —— 立即停止,不触发 Worker 内部清理逻辑
  • Worker 自己调用 self.close() —— 安全退出,适合完成任务后主动结束

Worker 结束后,其引用可被 GC 回收;但未 terminate 的 Worker 仍驻留内存,即使页面隐藏。

常见类型:Dedicated Worker vs Shared Worker

日常用的是 Dedicated Worker(一对一),每个实例只与创建它的脚本通信。Shared Worker 则允许多个页面/脚本共用一个 Worker(需同源),通过 port 通信:

  • Shared Worker 构造时需指定 name:new SharedWorker('shared.js', 'myWorker')
  • 必须显式调用 port.start() 启动消息通道
  • 适合跨 iframe 或多标签页共享状态或轮询逻辑(如统一通知服务)

不过多数场景用 Dedicated 就够了,更简单、更可控。

基本上就这些。Web Workers 不复杂但容易忽略通信边界和生命周期管理 —— 记住:没共享内存、没 DOM、靠消息、记得关。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2438

2023.09.20

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4818

2023.08.10

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

730

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

343

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

553

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

323

2025.11.27

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

4956

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1455

2023.07.28

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn