news 2026/5/27 1:05:55

Web Workers:JavaScript 的多线程编程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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,提升应用性能。

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

CRNN实战解析:从图像到文本的端到端识别之旅

1. CRNN模型初探&#xff1a;为什么它是OCR的首选&#xff1f; 第一次接触CRNN时&#xff0c;我被它的设计哲学惊艳到了。传统OCR流程像流水线作业&#xff1a;先文字检测再单字识别&#xff0c;每个环节都可能误差累积。而CRNN直接把整张图片扔进网络&#xff0c;输出就是识别…

作者头像 李华
网站建设 2026/5/27 1:03:50

优雅的桌面歌词体验:LyricsX Swift插件深度解析

优雅的桌面歌词体验&#xff1a;LyricsX Swift插件深度解析 【免费下载链接】Lyrics Swift-based iTunes plug-in to display lyrics on the desktop. 项目地址: https://gitcode.com/gh_mirrors/lyr/Lyrics 你是否曾在聆听音乐时渴望一种更沉浸式的体验&#xff1f;当美…

作者头像 李华
网站建设 2026/5/27 1:01:12

Redis 分布式锁进阶第七十二篇

承接上一篇锁超时、主从丢锁、集群脑裂三大生产问题&#xff0c;本篇聚焦 Redisson 中三类高频进阶锁&#xff1a;公平锁、异步锁、读写锁。分别讲解设计原理、适用场景、底层逻辑、核心代码与线上使用规范&#xff0c;区分不同业务场景该如何选型&#xff0c;同时对比普通非公…

作者头像 李华
网站建设 2026/5/27 0:59:41

AI智能体时代:如何通过四个关键问题重构组织架构与人机协同

1. 项目概述&#xff1a;当AI智能体成为组织新成员最近和几个不同行业的朋友聊天&#xff0c;发现一个挺有意思的现象&#xff1a;大家或多或少都在公司里用上了AI工具&#xff0c;但用法五花八门&#xff0c;效果也天差地别。有的团队把AI当作一个“超级实习生”&#xff0c;能…

作者头像 李华
网站建设 2026/5/27 0:59:05

压缩感知理论导向的核废物桶TGS图像重建技术【附代码】

✨ 长期致力于核废物桶、层析γ扫描、图像重建、压缩感知研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;压缩感知IART-TVM算法与极坐标网格划分&…

作者头像 李华