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

北京外包公司 网站开发2013深圳网站设计公司排名

北京外包公司 网站开发,2013深圳网站设计公司排名,免费seo网站自动推广软件,企业网站开发用什么语言写在 JavaScript 中,Web Worker 允许在后台线程中运行脚本,避免阻塞主线程。主线程与 Worker 线程通过 消息传递 进行通信,数据通过结构化克隆算法复制(非共享内存),以下是完整的通信机制和实践指南&#xff…

在 JavaScript 中,Web Worker 允许在后台线程中运行脚本,避免阻塞主线程。主线程与 Worker 线程通过 消息传递 进行通信,数据通过结构化克隆算法复制(非共享内存),以下是完整的通信机制和实践指南:


一、基础通信流程

1. 主线程 → Worker 线程
// 主线程代码
const worker = new Worker('worker.js');// 发送消息
worker.postMessage({ type: 'CALCULATE', data: [1, 2, 3] 
});// 接收消息
worker.onmessage = (event) => {console.log('主线程收到结果:', event.data);
};// 错误处理
worker.onerror = (error) => {console.error('Worker 错误:', error);
};
2. Worker 线程 → 主线程
// worker.js 代码
self.onmessage = (event) => {if (event.data.type === 'CALCULATE') {const result = event.data.data.reduce((a, b) => a + b, 0);// 发送结果回主线程self.postMessage({ result });}
};// 关闭 Worker
self.close(); // Worker 内部主动关闭

二、高级通信技巧

1. 传输大数据优化(Transferable Objects)

避免复制大数组,转移所有权提升性能:

// 主线程发送
const largeBuffer = new ArrayBuffer(1024 * 1024 * 100); // 100MB
worker.postMessage({ buffer: largeBuffer }, [largeBuffer] // 标记可转移对象
);
// 此时主线程不再拥有 largeBuffer 的访问权// Worker 接收
self.onmessage = (event) => {const buffer = event.data.buffer;
};
2. 双向通信 + 请求标识

处理多请求场景:

// 主线程
const requestId = Date.now();
worker.postMessage({ id: requestId, task: 'fetch', url: 'api/data' 
});worker.onmessage = (event) => {if (event.data.id === requestId) {// 处理对应请求的响应}
};

三、通信数据类型支持

通过 postMessage 可传输的数据类型:

  • 基本类型:String、Number、Boolean、null、undefined
  • 复杂类型:Object、Array、Date、RegExp、Blob、File、ImageData
  • 二进制数据:ArrayBuffer、TypedArray、DataView
  • 不支持的类型:Function、DOM 节点、原型链(会被丢弃)

四、错误处理与调试

1. 错误捕获
// Worker 内部错误
self.onerror = (error) => {console.error('Worker 内部错误:', error);return true; // 阻止默认错误冒泡
};// 主线程捕获
worker.onerror = (error) => {console.error('捕获到 Worker 错误:', error);
};
2. Chrome 调试
  • 打开 DevTools → Sources → 找到 Worker 脚本
  • 在 Worker 中设置 debugger 断点

五、关闭 Worker

避免内存泄漏:

// 主线程中终止
worker.terminate(); // 立即停止 Worker// Worker 内部关闭
self.close();

六、共享内存通信(高级)

通过 SharedArrayBuffer 实现线程间共享内存(需处理竞态条件):

// 主线程
const sharedBuffer = new SharedArrayBuffer(1024);
worker.postMessage({ buffer: sharedBuffer });// Worker 线程
self.onmessage = (event) => {const sharedArray = new Int32Array(event.data.buffer);Atomics.add(sharedArray, 0, 1); // 原子操作
};

七、注意事项

  1. 同源策略:Worker 脚本必须与主线程同源
  2. DOM 限制:Worker 无法访问 windowdocument 等对象
  3. 通信成本:频繁小消息建议批量发送
  4. 环境差异:Worker 中部分 API(如 WebSocket)行为可能不同

完整示例:质数计算

// 主线程
const worker = new Worker('prime.worker.js');worker.postMessage({ start: 1, end: 1000000 
});worker.onmessage = (event) => {console.log('找到质数数量:', event.data.count);
};// prime.worker.js
self.onmessage = (event) => {const { start, end } = event.data;let count = 0;for (let i = start; i <= end; i++) {if (isPrime(i)) count++;}self.postMessage({ count });
};function isPrime(num) {for (let i = 2; i <= Math.sqrt(num); i++) {if (num % i === 0) return false;}return num > 1;
}

通过合理使用 Worker 通信,可将 CPU 密集型任务(如加密、图像处理、复杂计算)转移至后台,保障主线程流畅性。


文章转载自:

http://0XYuez2Y.rwmzy.cn
http://O8InXmfO.rwmzy.cn
http://owKurV7Q.rwmzy.cn
http://7x7vv9GN.rwmzy.cn
http://krqwJvQ3.rwmzy.cn
http://ykpG4aTo.rwmzy.cn
http://KqIGIweL.rwmzy.cn
http://uOS9kYXK.rwmzy.cn
http://Lfh7oTsB.rwmzy.cn
http://XxwCiq0w.rwmzy.cn
http://bjrh0mab.rwmzy.cn
http://byzG7kmf.rwmzy.cn
http://MvZGsDbu.rwmzy.cn
http://cuo1cK00.rwmzy.cn
http://4H3DIYPX.rwmzy.cn
http://x4Oz7eUB.rwmzy.cn
http://emXo13mD.rwmzy.cn
http://c8RDdB5a.rwmzy.cn
http://RFHb7EC4.rwmzy.cn
http://wgDLEuKc.rwmzy.cn
http://DfGVGVoY.rwmzy.cn
http://RcxspB5g.rwmzy.cn
http://Wjod0Pja.rwmzy.cn
http://fDsRPFGB.rwmzy.cn
http://Mh5Gj88B.rwmzy.cn
http://2QfIV28R.rwmzy.cn
http://dXfb5p3h.rwmzy.cn
http://AUjUICgT.rwmzy.cn
http://hmgZtHIM.rwmzy.cn
http://YiQfieFa.rwmzy.cn
http://www.dtcms.com/wzjs/688164.html

相关文章:

  • 郑州网站建设哪家便宜中山百度推广公司
  • 济南手机网站建设公司排名单页网站的营销
  • 广西壮族自治区市场监督管理局官网网站推广优化招聘
  • 在线视频网站开发方案php施工企业安全生产评价汇总表最终须由( )签名。
  • 综合门户型网站有哪些凉山州建设局网站
  • win2008 iis网站发布为什么备案关闭网站
  • 网站所有者查询网站流量怎么做乡1万
  • hao123网站模板长沙网站制作与设计
  • 中英文切换网站怎么做企业网站建设营销优化方案
  • 长沙优化网站技术厂家360浏览器建设银行网站
  • 工程建设室内涂料招投标网站做网站 简单外包
  • php网站开发外包营销策划与运营方案
  • 网站源码哪个好网站上的qq咨询怎么做
  • 制作个简单公司网站要多少钱社区建立网站
  • 用什么程序做视频网站如何为自己公司做网站
  • 电子网站建设策划模板asp网站安全吗
  • 中国制造网外贸网站深圳东门属于哪个区
  • 石嘴山网站定制开发建设销售平台排行榜前十名
  • 怎么看网站是不是用凡客做的精品网站建设费用磐石网络
  • 有没有做网站一次付费十堰网站建设价格
  • 网站建设内页六安人论坛百姓杂谈
  • 网站开发记什么费用网站制作哪里做得好
  • 杭州网站设计网页做旅游广告在哪个网站做效果好
  • 西安北郊做网站响应式网站建设案例
  • 绿色的医疗资讯手机网站wap模板html源码下载网站建设中期怎么入账
  • 海宁市住房和城乡规划建设局网站黔江网站制作
  • 什么查网站是否降权西安seo排名优化推广价格
  • 佛山市做网站的公司旅游电子商务网站建设费用
  • 做网站开发用笔记本要什么配置wordpress下载官网
  • 手机微网站怎么制作的网站编辑 seo