Web Worker 简介

为什么使用?

JS 是单线程,现在计算机很多都是多核CPU,不能很好利用多核的性能。所以 web worker 就是在主线程外,再增加一个线程,进行高性能计算和高延迟任务。

特点

主线程和 worker 线程不会干扰。两个线程需要通信形式传值。

worker 线程不会被主线程的 dom 事件干扰;worker 线程不能获取主线程的 DOM;无法读取本地的文件

主线程代码

// 创建工作线程
var worker = new Worker('test.js');// 主线程向 worder 发送消息
worker.postMessage('comment');
worker.postMessage({method: 'add', id: '888'});// 主线程事件监听
workder.onmessage = (e) => {  console.log(e.data);
  worker.postMessage('receive data success');
}workder.onerror = (error) => {  console.log(error.message);
}

worker 线程代码(使用 self)

// 子线程的全局对象(self)
self.addEventListener('message', (e) => {  console.log(e);
  let data = e.data;
  let type = data.type;
  // 根据不同的事件类型,执行不同的函数
  switch(type):
    case 'add':
        self.postMessage('WORKER STARTED: ' + data.msg);
      break;
    case 'stop':
      self.postMessage('WORKER STOPPED: ' + data.msg);
      self.close(); // Terminates the worker.
      break;
    default:
      self.postMessage('Unknown command: ' + data.msg);
});

worker 内部加载脚本

importScripts('test1.js', 'test2.js')

关闭 worker线程

worker.terminate();self.close();

API

主线程

  • Worker.onerror:指定 error 事件的监听函数。
  • Worker.onmessage:指定 message 事件的监听函数,发送过来的数据在Event.data属性中。
  • Worker.onmessageerror:指定 messageerror 事件的监听函数。发送的数据无法序列化成字符串时,会触发这个事件。
  • Worker.postMessage():向 Worker 线程发送消息。
  • Worker.terminate():立即终止 Worker 线程。

worker 线程

  • self.name: Worker 的名字。该属性只读,由构造函数指定。
  • self.onmessage:指定message事件的监听函数。
  • self.onmessageerror:指定 messageerror 事件的监听函数。发送的数据无法序列化成字符串时,会触发这个事件。
  • self.postMessage():向产生这个 Worker 线程发送消息。
  • self.close():关闭 Worker 线程。
  • self.importScripts():加载 JS 脚本。

注意事项

  • Worker 传值都是拷贝一份,不是传递指针,所以拷贝大文件需要注意性能
  • 可以传递普通变量,也可以传递大文件 arrayBuffer blob

参考资料

https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API (MDN)

https://www.ruanyifeng.com/blog/2018/07/web-worker.html (主要参考)

https://wangdoc.com/javascript/bom/webworker.html (和第二个一样)

https://juejin.cn/post/6844903496550989837 (仅供参考)


http://www.taodudu.cc/news/show-6294776.html

相关文章:

  • WebWork教程一
  • 2023 年的 Web Worker 项目实践
  • WEB Workers 介绍
  • Web Work 简介
  • 关于WebWork
  • WebWork介绍
  • [WEB]WEB工程
  • Web Worker 初探
  • 开始我的WebWork之旅
  • web-worker的学习
  • 认识Web Workers
  • 一文了解Web Worker
  • 详解 Web Worker,不再止步于会用
  • 锁相环(PLL)基本原理与频率合成器
  • 锁相环的组成和原理及应用
  • LMK04828时钟芯片配置——配置理解
  • 锁相环(1)
  • 【模拟集成电路】鉴频鉴相器设计(Phase Frequency Detector,PFD)
  • R语言绘制矩阵散点图
  • 基于vue+exharts的双折线图
  • React+echarts+antd实现折线图
  • [VUE2/VUE3]基于echarts的动态折线图组件
  • Echarts最简单的折线图、柱图、饼图、仪表盘+sql语句
  • 【iOS】简单易用的折线图控件
  • vue折线图(按时间查询)
  • iOS动画折线图
  • iOS 折线图实现
  • d3.js折线图_学习使用D3.js创建折线图
  • 绘制折线图
  • Echarts通用饼图、柱状图、折线图封装

Web Worker 简介相关推荐

  1. web worker简介

    web worker简介 http://m.blog.csdn.net/blog/Michael890818/38440401 2014-8-8阅读410 评论1 Web Workers 是 HTML ...

  2. web Worker简介、web Worker报错分析、作用

    web Worker: web Worker是运行在后台的javascript,不会影响性能,常用于高耗费CPU的任务,必须部署到线上才可以正常使用,这里有三个方法比较重要,需要注意: postMes ...

  3. 一文了解Web Worker

    一.概述 众所周知,JavaScript最初设计是运行在浏览器中的,为了防止多个线程同时操作DOM带来的渲染冲突问题,所以JavaScript执行器被设计成单线程.但是随着前端技术的发展,JavaSc ...

  4. 关于Web Worker你必须知道的7件事

    原文:http://www.developer.com/lang/jscript/7-things-you-need-to-know-about-web-workers.html 译者: Rock(r ...

  5. web worker的介绍和使用

    文章目录 简介 Web Workers的基本概念和使用 Web Workers的分类 worker和main thread之间的数据传输 简介 什么是web worker呢?从名字上就可以看出,web ...

  6. PWA(Progressive Web App)入门系列:(五)Web Worker

    前言 在说Service Worker前有必要说一下Web Worker,因为Service Worker本身就属于Web Worker的延伸,大部分功能也是基于Web Worker进行的扩展. 背景 ...

  7. 一文搞懂 Web Worker(原理到实践)

    作者:poetry 原文地址:https://mp.weixin.qq.com/s/XF7qOhbBtYlwADCiyxbT-w Web Worker 作为浏览器多线程技术,在页面内容不断丰富,功能日 ...

  8. 深入理解web Worker

    简介 我们都知道js是单线程模型.也就是说一次只能处理一件事情,前面的事情没有完毕,后面的事情要等待前面的事情处理完毕后才能执行.随着多核CPU的出现,我们可以最大限度的利用cpu多核,来提高js的性 ...

  9. web安全简介_Web安全:HTTP简介

    web安全简介 by Alex Nadalin 通过亚历克斯·纳达林 Web安全:HTTP简介 (Web Security: an introduction to HTTP) This is part ...

最新文章

  1. ios多线程和进程的区别(转载)
  2. gcc c语言标准,GCC 7.1发布 支持当前所有的C ++ 17标准
  3. WPF中的动画——(五)路径动画
  4. 《高性能JavaScript》第一章 加载和执行
  5. OpenGL 4.0 Tutorials 第三章:初始化 OpenGL 4.0
  6. php强制cookies,php Cookies操作类(附源码)
  7. cuda的global memory介绍
  8. 云原生数据湖解决方案打破数据孤岛,大数据驱动互娱行业发展
  9. 不附加数据库 ASP.NET调用.sql文件
  10. 4 谐波_谐波的基础知识
  11. Spring Boot + Activiti 工作流框架搭建
  12. 如何站在双11的肩膀上 详解阿里云企业级互联网架构
  13. 在算法横行的时代,仍需要人类把关
  14. LeetCode4 寻找两个正序数组的中位数
  15. shell脚本语言和java_shell脚本学习与总结
  16. 计算机协议-http
  17. 年薪201W!华为新天才少年出炉:武大94年博士生入选!任正非最新发声:江山代有才人出,不拘一格降人才!...
  18. 绘图用计算机软件的基本种类有,主编教您电脑绘图软件有哪些
  19. java多级继承_java代码继承------多层继承
  20. gtk之G_LIKELY(expr)和G_UNLIKELY(expr)

热门文章

  1. 图森计划裁员25%/ 特斯拉被曝将冻结招聘/ 天才黑客Geohot从推特辞职…今日更多新鲜事在此...
  2. som java_SOM网络聚类完整示例(利用python和java)
  3. pat1034Head of a Gang (30)
  4. 边缘计算概念以及应用
  5. sudo apt-get update 报错 ubuntu xenial InRelease 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)解决
  6. Cadence教程4——环形振荡器
  7. 【网络编程】基于TCP/IP协议的C/S模型
  8. 软件测试价值提升之路--第2部分“扫门前雪”-第5章“测试过程可控”-读书笔记
  9. java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密
  10. Windows环境下编译pjsip