讲师中心 微信公众号
AI工具推荐 视频效率加速

什么是javascript的Web_Workers多线程技术【教程】

大静君_7815

大静君_7815

发布时间:2026-01-26 15:17:28

|

272人浏览过

|

来源于php中文网

原创

Web Workers 是浏览器提供的后台线程机制,用于在独立线程中运行脚本以避免阻塞主线程;它不改变 JavaScript 单线程本质,不可访问 DOM,仅通过 postMessage 通信,适用于 CPU 密集型任务。

什么是javascript的web_workers多线程技术【教程】

JavaScript 本身是单线程的,Web Workers 不是让 JS 变成多线程语言,而是提供一种**在后台线程运行脚本**的机制,避免阻塞主线程 —— 这是它唯一且核心的作用。

Web Workers 为什么不能直接访问 DOM

因为 DOM 操作必须由主线程控制,这是浏览器的安全与渲染模型决定的。Worker 线程里访问 document、window 或 alert() 都会直接报错:ReferenceError: document is not defined。

  • Worker 中可用的全局对象只有 self、console、fetch、setTimeout 等有限 API
  • 所有数据通信必须通过 postMessage() 和 onmessage,且传参会被序列化(结构化克隆),函数、DOM 节点、undefined 等无法传递
  • 如果需要更新界面,Worker 处理完结果后,必须把数据发回主线程,由主线程操作 DOM

如何正确创建和使用 Dedicated Worker

最常用的是专用 Worker(DedicatedWorker),一个 Worker 实例只对应一个主线程。

  • Worker 脚本必须放在独立的 .js 文件中(如 worker.js),不能是内联字符串或 Blob URL(部分旧环境不支持)
  • 主线程中用 new Worker('./worker.js') 创建,路径需符合同源策略
  • 通信靠消息:主线程用 worker.postMessage(data) 发送,Worker 用 self.onmessage = e => { ... } 接收;反之亦然
  • 别忘了错误监听:worker.onerror 或 worker.addEventListener('error', ...),否则 Worker 内部抛错会静默失败

SharedWorker 和 ServiceWorker 的关键区别

它们名字都带 “Worker”,但定位完全不同,混用会导致严重逻辑错乱。

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

  • SharedWorker 可被**同源多个页面/iframe 共享**,适合跨 tab 协作场景(如实时同步状态),但调试困难,兼容性略差(Safari 曾长期不支持 port.start())
  • ServiceWorker 是网络代理层,主要做离线缓存、推送、后台同步,**生命周期独立于页面**,必须 HTTPS(localhost 除外),注册后需手动激活、跳过等待等步骤,和计算密集型任务无关
  • 三者不能互相替代:CPU 密集任务选 Worker,跨页通信考虑 SharedWorker,网络拦截/离线能力用 ServiceWorker

Worker 中处理大数组或 JSON 解析的典型陷阱

很多人以为把 JSON.parse(bigString) 或循环 10 万次塞进 Worker 就万事大吉,其实不然。

  • 传入数据过大时,postMessage() 序列化/反序列化本身就有开销,可能比计算还慢;可改用 Transferable(如 ArrayBuffer)零拷贝传递
  • Worker 初始化也有成本(JS 解析、作用域建立),频繁创建销毁 Worker 反而更卡;应复用实例,或用 Worker Pool 管理
  • Chrome DevTools 的 Performance 面板里,Worker 线程是独立的 timeline,但默认不显示 —— 需右键 timeline → “Show all threads” 才能看到真实耗时分布

真正难的不是写几行 postMessage,而是判断「这个任务到底值不值得扔进 Worker」:IO 类(如 fetch)、短平快计算(50ms 的才合适。边界模糊时,先测再拆。

热门AI工具

更多
WorkBuddy

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

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

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

DeepSeek

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

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2155

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3322

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1116

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3799

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2746

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5399

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3847

2026.03.24

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

989

2023.10.18

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

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

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

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

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