news 2026/4/18 0:30:02

工作者线程通信方式对比( postMessage()、MessageChannel、BroadcastChannel)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工作者线程通信方式对比( postMessage()、MessageChannel、BroadcastChannel)

工作者线程通信方式对比

特性postMessage()MessageChannelBroadcastChannel
通信模式点对点(直接通信)点对点(通道通信)一对多(广播通信)
通信方向单向(发送到特定接收方)双向(通过端口相互通信)单向广播(发送给所有订阅者)
创建方式内置于WorkerWindowiframe等对象通过new MessageChannel()创建通过new BroadcastChannel(name)创建
主要用途与特定工作者或窗口通信两个上下文之间的专用通道同源下的多个上下文间广播消息
连接建立隐式(通过目标对象的引用)显式(通过传递端口)隐式(通过共享频道名称)
消息路由直接发送到目标对象通过port1port2端口发送到所有同名的频道订阅者
典型应用场景主线程与 Worker 通信两个 Worker 之间直接通信多个标签页或窗口间同步状态
关闭方式无法单独关闭通信,需终止工作者可关闭单个端口或整个通道关闭频道或关闭上下文
兼容性广泛支持(包括 IE10+)广泛支持(包括 IE10+)现代浏览器(IE不支持)
消息事件监听onmessageaddEventListener('message', ...)port.onmessageaddEventListener('message', ...)onmessageaddEventListener('message', ...)
传递机制结构化克隆算法(支持大多数数据类型)结构化克隆算法结构化克隆算法
性能特点直接高效,适合固定通信对适合需要双向通信的专用链路广播开销较大,适合低频同步

使用示例

1.postMessage()

javascript

// 主线程 const worker = new Worker('worker.js'); worker.postMessage('Hello Worker'); // Worker 线程 self.onmessage = (e) => { console.log(e.data); // 'Hello Worker' self.postMessage('Hello Main'); };

2.MessageChannel

javascript

// 创建通道 const channel = new MessageChannel(); // 端口1监听 channel.port1.onmessage = (e) => { console.log('Port1 received:', e.data); }; // 通过端口2发送 channel.port2.postMessage('Hello through channel'); // 可将端口传递给其他工作者 worker.postMessage({ port: channel.port2 }, [channel.port2]);

3.BroadcastChannel

javascript

// 所有需要通信的上下文 const channel = new BroadcastChannel('app-channel'); // 发送广播 channel.postMessage({ type: 'update', data: 'new data' }); // 接收广播 channel.onmessage = (e) => { console.log('Received:', e.data); }; // 关闭 channel.close();

选择建议

  1. 使用postMessage():当需要与特定的工作者、窗口或 iframe 进行直接通信时

  2. 使用MessageChannel:当需要两个上下文之间建立专用的双向通信通道时

  3. 使用BroadcastChannel:当需要在同源下的多个上下文(标签页、工作者等)之间广播消息时


这三种方式可以结合使用,例如通过postMessage()传递MessageChannel的端口,实现在不同工作者之间建立直接通信通道。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:07:26

工业级语音模组的USB突围——AP0316如何破解复杂环境连接难题

USB接口因通用性成为消费电子的标配,但在工厂车间、矿山井下等工业场景中,却面临着电磁干扰、接地电位差、极端温湿度等多重挑战。传统语音模组的USB接口常出现数据传输中断、噪音干扰加剧、设备枚举失败等问题,而AP0316作为专为工业场景设计…

作者头像 李华
网站建设 2026/4/18 10:18:13

**AI漫剧制作工具2025推荐,解锁低成本创意变现新路径*

AI漫剧制作工具2025推荐,解锁低成本创意变现新路径据《2025中国数字内容产业白皮书》显示,2025年国内漫剧市场规模预计突破120亿元,同比增长65%,但传统制作模式下,高达70%的创作者受困于剧本改编难、制作成本高、周期长…

作者头像 李华
网站建设 2026/4/18 8:07:55

22、深入了解 fwsnort:从运行到配置与使用

深入了解 fwsnort:从运行到配置与使用 1. 运行 fwsnort 当 fwsnort 安装在支持内核字符串匹配的系统上后,就可以从命令行启动它。通常,fwsnort 以 root 身份执行,因为默认情况下它会查询 iptables 以确定运行内核中可用的扩展,然后相应地调整翻译过程。以下是运行 fwsn…

作者头像 李华
网站建设 2026/4/18 7:02:28

32、网络安全分析与攻击模拟技术详解

网络安全分析与攻击模拟技术详解 在网络安全领域,对日志数据的深入分析以及对攻击行为的模拟和防范是至关重要的。本文将围绕网络端口扫描、蠕虫攻击检测、异常连接分析以及攻击模拟等方面展开详细探讨。 1. 端口扫描分析 端口扫描是网络攻击的常见前奏,通过分析日志可以了…

作者头像 李华
网站建设 2026/4/18 5:42:49

基于SpringBoot的拍立得购买平台的设计与实现毕业设计项目源码

项目简介 在拍立得消费个性化、场景化需求升级的背景下,传统电商平台存在 “品类适配性差、配件与机身匹配度低、用户体验单一” 的痛点,基于 SpringBoot 构建的拍立得购买平台,聚焦拍立得垂直品类,实现机身、相纸、配件的一体化交…

作者头像 李华
网站建设 2026/4/17 16:42:37

在校大学生零基础参加_CTF:从入门到参赛拿奖,保姆级指南

在校大学生零基础参加 CTF:从入门到参赛拿奖,保姆级指南 作为转行网安、靠 CTF 竞赛加分求职的过来人,我发现很多大学生对 CTF 既好奇又迷茫 —— 想参加但不知道从哪下手,怕自己零基础跟不上,也不懂赛事规则和组队技…

作者头像 李华