当前位置: 首页 > news >正文

Web Workers:JavaScript 的多线程编程

Web Workers:JavaScript 的多线程编程

什么是 Web Workers?

Web Workers 允许在后台线程中运行脚本,不阻塞主线程。

Web Workers 的类型

类型说明
Dedicated Worker专用 Worker,只能被创建它的脚本使用
Shared Worker共享 Worker,可以被多个脚本使用
Service Worker服务 Worker,用于离线缓存和推送

创建 Worker

// main.js const worker = new Worker('worker.js'); worker.postMessage('Hello from main'); worker.onmessage = (event) => { console.log('收到消息:', event.data); }; worker.onerror = (error) => { console.error('Worker error:', error.message); };
// worker.js self.onmessage = (event) => { console.log('Worker 收到:', event.data); // 处理耗时任务 const result = heavyComputation(event.data); self.postMessage(result); }; function heavyComputation(data) { // 耗时计算 return data; }

数据传递

// 传递基本类型 worker.postMessage('hello'); worker.postMessage(42); worker.postMessage(true); // 传递对象(会被序列化) worker.postMessage({ name: 'John', age: 30 }); // 传递二进制数据 const buffer = new ArrayBuffer(1024); worker.postMessage(buffer, [buffer]);

终止 Worker

// 主线程中终止 worker.terminate(); // Worker 内部终止 self.close();

Shared Worker

// 多个页面共享同一个 Worker const sharedWorker = new SharedWorker('shared-worker.js'); sharedWorker.port.start(); sharedWorker.port.postMessage('Hello'); sharedWorker.port.onmessage = (event) => { console.log(event.data); };

实际应用场景

场景一:数据处理

// worker.js self.onmessage = (event) => { const data = event.data; // 处理大量数据 const result = data.map(item => processItem(item)); self.postMessage(result); };

场景二:图像处理

// worker.js self.onmessage = (event) => { const imageData = event.data; // 图像处理 for (let i = 0; i < imageData.data.length; i += 4) { // 修改像素 imageData.data[i] = 255 - imageData.data[i]; // R imageData.data[i + 1] = 255 - imageData.data[i + 1]; // G imageData.data[i + 2] = 255 - imageData.data[i + 2]; // B } self.postMessage(imageData); };

限制

const limitations = [ '不能访问 DOM', '不能使用 window 对象', '不能访问本地存储', '不能跨域加载脚本' ];

最佳实践

const bestPractices = [ '用于耗时计算', '避免频繁通信', '合理使用传输对象', '处理错误和异常' ];

总结

Web Workers 为 JavaScript 带来了多线程能力:

  1. 主线程不阻塞:提升用户体验
  2. 并行处理:提高计算效率
  3. 后台任务:处理耗时操作
  4. 简单易用:API 简洁明了

合理使用 Web Workers,提升应用性能。

http://www.jsqmd.com/news/893549/

相关文章:

  • Flutter MVC架构详解:经典架构模式实战
  • 2026西南方管供应商推荐及选购指南:镀锌方管生产厂家/附近方管批发/附近钢材批发市场/附近钢材采购批发/哪里有方管批发/选择指南 - 优质品牌商家
  • Ollama Python SDK工程实践:本地大模型服务化开发指南
  • Animotion MCP:基于MCP协议为AI编程提供标准图标与动画资源
  • 深圳律师 别人欠钱不还怎么办?2026最新完整维权指南 - 从来都是英雄出少年
  • 2026年Q2山东家用梯厂家专业度实测对比评测:山东三层电梯、山东二层电梯、山东别墅电梯、山东四层电梯、山东复式楼电梯选择指南 - 优质品牌商家
  • FDE:一个人 + AI,能不能跑通全栈?
  • 优雅的桌面歌词体验:LyricsX Swift插件深度解析
  • LoRA微调实战指南:企业级AI模型精准校准方法
  • 量子计算中qutrit电路优化与Steiner-Gauss算法应用
  • Ubuntu系统中telnet服务的配置与安全实践
  • 2026年净化公司TOP10榜单:无尘车间/GMP净化/无菌实验室/洁净室工程/手术室净化/食品车间/电子厂房/生物医药最新推荐 - 企业推荐官【官方】
  • Win10下Python虚拟环境激活报错:深入解析ExecutionPolicy权限与管理员模式解决方案
  • 基于PLC的立体仓库控制系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)_文章底部可以扫码
  • LangGraph多智能体协作效率:从理论模型到工程实践的量化分析
  • 消息队列顺序性保证实战
  • 集成学习在低资源语言情感分析中的应用:以波斯语社交媒体评论为例
  • RFDoc:面向证件检测的高效二进制局部特征描述符设计与实践
  • 无标签知识蒸馏:用动态合成数据训练轻量级人脸识别模型
  • 2026雨水收集系统厂家推荐榜:消防不锈钢水箱/焊接不锈钢水箱/生活不锈钢水箱/组合式不锈钢水箱/调蓄型雨水收集系统/选择指南 - 优质品牌商家
  • 11- Claude Code 最强插件库详解:从安装到全插件用途全吃透
  • SignFormer:基于Vision Transformer的静态手语识别模型解析与实战
  • KK-HF Patch:如何解决恋活!游戏体验的三大核心痛点?
  • 构建多图记忆系统VEKTOR:让AI智能体告别金鱼综合症
  • MHmarkets:平台工具、风控与体验体系观察
  • 保姆级教程:在Windows 10/11上配置Kaggle CLI并一键提交submission.csv
  • 明日方舟游戏资源库:技术开发者与创意工作者的完整解决方案
  • 美容平台支付失败率骤降91%:Lovable多通道聚合支付网关设计(含微信/支付宝/跨境PayPal容灾切换逻辑)
  • 利用Taotoken为内容创作平台集成多模型文本生成能力
  • 基于Transformer与知识图谱的药物重定位:2型糖尿病老药新用智能发现