Web Worker 简介
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 简介相关推荐
- web worker简介
web worker简介 http://m.blog.csdn.net/blog/Michael890818/38440401 2014-8-8阅读410 评论1 Web Workers 是 HTML ...
- web Worker简介、web Worker报错分析、作用
web Worker: web Worker是运行在后台的javascript,不会影响性能,常用于高耗费CPU的任务,必须部署到线上才可以正常使用,这里有三个方法比较重要,需要注意: postMes ...
- 一文了解Web Worker
一.概述 众所周知,JavaScript最初设计是运行在浏览器中的,为了防止多个线程同时操作DOM带来的渲染冲突问题,所以JavaScript执行器被设计成单线程.但是随着前端技术的发展,JavaSc ...
- 关于Web Worker你必须知道的7件事
原文:http://www.developer.com/lang/jscript/7-things-you-need-to-know-about-web-workers.html 译者: Rock(r ...
- web worker的介绍和使用
文章目录 简介 Web Workers的基本概念和使用 Web Workers的分类 worker和main thread之间的数据传输 简介 什么是web worker呢?从名字上就可以看出,web ...
- PWA(Progressive Web App)入门系列:(五)Web Worker
前言 在说Service Worker前有必要说一下Web Worker,因为Service Worker本身就属于Web Worker的延伸,大部分功能也是基于Web Worker进行的扩展. 背景 ...
- 一文搞懂 Web Worker(原理到实践)
作者:poetry 原文地址:https://mp.weixin.qq.com/s/XF7qOhbBtYlwADCiyxbT-w Web Worker 作为浏览器多线程技术,在页面内容不断丰富,功能日 ...
- 深入理解web Worker
简介 我们都知道js是单线程模型.也就是说一次只能处理一件事情,前面的事情没有完毕,后面的事情要等待前面的事情处理完毕后才能执行.随着多核CPU的出现,我们可以最大限度的利用cpu多核,来提高js的性 ...
- web安全简介_Web安全:HTTP简介
web安全简介 by Alex Nadalin 通过亚历克斯·纳达林 Web安全:HTTP简介 (Web Security: an introduction to HTTP) This is part ...
最新文章
- ios多线程和进程的区别(转载)
- gcc c语言标准,GCC 7.1发布 支持当前所有的C ++ 17标准
- WPF中的动画——(五)路径动画
- 《高性能JavaScript》第一章 加载和执行
- OpenGL 4.0 Tutorials 第三章:初始化 OpenGL 4.0
- php强制cookies,php Cookies操作类(附源码)
- cuda的global memory介绍
- 云原生数据湖解决方案打破数据孤岛,大数据驱动互娱行业发展
- 不附加数据库 ASP.NET调用.sql文件
- 4 谐波_谐波的基础知识
- Spring Boot + Activiti 工作流框架搭建
- 如何站在双11的肩膀上 详解阿里云企业级互联网架构
- 在算法横行的时代,仍需要人类把关
- LeetCode4 寻找两个正序数组的中位数
- shell脚本语言和java_shell脚本学习与总结
- 计算机协议-http
- 年薪201W!华为新天才少年出炉:武大94年博士生入选!任正非最新发声:江山代有才人出,不拘一格降人才!...
- 绘图用计算机软件的基本种类有,主编教您电脑绘图软件有哪些
- java多级继承_java代码继承------多层继承
- gtk之G_LIKELY(expr)和G_UNLIKELY(expr)
热门文章
- 图森计划裁员25%/ 特斯拉被曝将冻结招聘/ 天才黑客Geohot从推特辞职…今日更多新鲜事在此...
- som java_SOM网络聚类完整示例(利用python和java)
- pat1034Head of a Gang (30)
- 边缘计算概念以及应用
- sudo apt-get update 报错 ubuntu xenial InRelease 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)解决
- Cadence教程4——环形振荡器
- 【网络编程】基于TCP/IP协议的C/S模型
- 软件测试价值提升之路--第2部分“扫门前雪”-第5章“测试过程可控”-读书笔记
- java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密
- Windows环境下编译pjsip