JavaScript 工作者线程基础

目录

  • 前言
  • 一、创建工作者线程
  • 二、使用工作者线程
  • 三、性能
  • 四、工作者线程特点
  • 五、工作者线程的全局对象
  • 六、工作者线程的类型
  • END


前言

创建工作者线程来处理繁杂的计算,网络请求或其他花费时间的工作,避免阻滞页面加载.

但需要注意创建工作者线程也是一个花费较大的行为,去除“成本”能够得到多少收益需要自行斟酌.


一、创建工作者线程

创建工作者线程的方式之一是加载Javascript文件,并将文件路径提供给Worker构造函数:

// main.js
const worker = new Worker (location.href + './worker.js');

安全限制_同源策略: 工作者线程加载的脚本文件只能从与父页面相同的源加载.

const remoteOriWorker = new Worker('https: //untrusted.com/worker.js'); //从非同源地址加载
// 报错

也有加载非同源文件的方式: importScripts(),后面会说.


二、使用工作者线程

最重要的是主线程和工作者线程通信,工作者线程在主线程外帮处理复杂的事情,但处理完还是要拿给主线程用,或者通知主线程的.

实例化Worker构造函数返回的worker对象暴露的API可用于在上下文和工作者线程间通讯, 以及捕获工作者线程发出的事件.

onerror: 工作者线程中出错 worker对象发出该事件;该事件可被监听:

worker.addEventListener('error', handler);

onmessage: 工作者线程中发生 messageEvent类型事件时(工作者线程中向上下文发送消息时), worker对象发出该事件:

worker.addEventListener('message', handler);

postMessage(): 通过异步消息事件向工作者线程发送信息,这是一个方法.

terminate(): 不为工作者线程提供清理机会,立即中止工作者线程,方法.


三、性能

worker对象在该工作者线程终止前不会被回收.

断开worker对象引用后无法恢复引用关系, worker对象也不会被回收.


四、工作者线程特点

// worker.js
console.log('worker:', self);
// main.js:
const worker = new Worker('./ worker.js');
console.log ('worker obj:', worker);

工作者线程具有不可忽略的启动延迟, 以上代码工作者线程的打印落后于主线程.
本例中self.console将两线程的消息序列化后打印,但打印顺序依赖于浏览器自行判断,结果是出乎意料的.


五、工作者线程的全局对象

WorkerGlobalScope工作者线程中的全局对象,在工作者线程中通过self关键字暴露,self是window的严格子集, 其中部分同名属性值不同, self中不同:

navigator: 返回与工作者线程关联的 WorkerNavigator.self: 返回WorkerGlobalScope对象 location: 返回与工作者线程关联的 WorkerLocation.performance: 返回只包含特定属性和方法的performance对象.console: 返回与工作者线程关联的console对象,API没有限制.caches: 返回与工作者线程关联的cacheStorage对象,API无限制.indexedDB: 返回IDBFactony对象.isSecureContext: 返回布尔值, 反映工作者线程上下文是否安全.origin: 返回workerGlobalSeope的源.

六、工作者线程的类型

每种类型的工作者线程都使用自己特定的全局对象,不过都是WorkerGlobalScope的子类.

专用工作者线程: DedicatedworkerGlobalScope
共享工作者线程: SharedworkerGlobalScope
服务工作者线程: ServiceworkerGlobalScope

这些将在后续文章中描述.
这三种子类的使用多于基础的工作者线程.


END

专用工作者线程等会在下篇完成.
如有疏漏,请为我指正,谢谢.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis5.0 cluster一个机器维修迁移到另外一个机器

redis cluster 当中一台机器需要维修,因此需要把这台机器上的redis cluster主节点都迁移到另外一台机器。 1、将机器的节点的加入到集群。 检查集群: /usr/local/redis5/bin/redis-cli -p 6381 --cluster check 10.21.81.29:6381:6381 使用meet命令…

第二十九篇:图解TCP三次握手,看过不会忘,从底层说清楚,TCP系列四

⼀开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端⼝,处于 LISTEN 状态。 接下来这部分内容的介绍将影响你能不能彻底理解了TCP的三次握手。 一、划重点:只有服务端启动了端口监听,客户端TCP握手才能建立连接&…

ubuntu系统库和Anaconda库冲突问题

之前安装opencv时没出现过这种问题,自从安装Anaconda后就总遇到问题。记录下自己的解决过程。 目录 第一步 第二步 第三步 安装opencv时出现以下问题: /usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_prep_cif@LIBFFI_BASE_7.…

数据库表的关联、集合操作

数据库表的关联、集合操作 join、MySQL、Oracle什么left right的老是忘,归根到底还是不熟练,记录下来,以后就不用再搜了。 设表A、表B分别包含员工信息和部门信息。 表A包含员工的ID、姓名和部门ID, 表B包含部门ID和部门名称。 …

若依框架篇-若依集成 X-File-Storage 框架(实现图片上传阿里云 OSS 服务器)、EasyExcel 框架(实现 Excel 数据批量导入功能)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 实现使用 Excel 文件批量导入 1.1 导入功能的前端具体实现 1.2 导入功能的后端具体实现 1.3 使用 EasyExcel 框架实现 Excel 读、写功能 1.4 将 Easy Excel 集成到…

路径跟踪之导航向量场(二)——三维导航向量场

上一期文章介绍了二维平面下的导航向量场计算方法,本期文章将介绍三维空间中,导航向量场及扩展。 本文主要介绍论文[1]中提出的一种基于导航向量场的航迹跟踪算法。此外,虽然本文以三维航迹为例进行介绍,但该方法可非常方便的拓展…

智能优化算法-生物地理学算法(BBO)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 生物地理学优化算法 (Biogeography-Based Optimization, BBO) 是一种基于生物地理学原理的元启发式优化算法,由Dan Simon于2008年提出。BBO通过模拟物种在不同栖息地之间的迁移过程来搜索最优解&…

【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:断开连接的本质 二:四次挥手 1:FIN 2:过程梳理 …

自制RK3588板卡调试,解决启动卡死问题

自制RK3588板卡调试,解决启动卡死问题。 1:首次加载后,启动卡住在HDMI。log如下。 DDR 3488111f83 cym 24/04/12-12:49:26,fwver: v1.17 LPDDR4X, 1560MHz channel[0] BW16 Col10 Bk8 CS0 Row17 CS1 Row17 CS2 Die BW16 Size4096MB channel…

新时代AI桌宠:XGO Rider让你的办公室瞬间高大上

​ XGO Rider Luwu 智能打造了桌面双轮足式机器人 XGO Rider,这款全球首创的轮腿式桌面AI机器人,正在悄然改变我们的办公环境。它不仅是一个高科技玩具,更是一个能大幅提升工作效率和办公室科技感的智能助手。 XGO Rider 新时代“桌宠” micr…

基于java+springboot的宇宙动漫网站

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图 前言 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 本系统为用户而设计制作宇宙动漫网站,旨在实现宇宙动漫智能化、现代化管理。本宇宙动漫管理自…

爬虫——scrapy的基本使用

一,scrapy的概念和流程 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 框架就是把之前简单的操作抽象成一套系统,这样我们在使用框架的时候,它会自动的帮我们完成很…

【数据结构与算法】之有序链表去重(保留重复元素)

目录 1.问题描述 2.思路讲解 3.Java 代码实现 4.代码解释 5.复杂度分析 6.其它方法 6.1 递归实现 6.2 双指针 7.总结 相关教程: 有序链表去重(不保留重复元素) 数据结构之链表详解 递归详解 1.问题描述 给定一个已排序的单链表…

Java可以做人工智能吗-回答是当然可以

Java在人工智能应用开发中的角色与优势 人工智能主要分为两个部分:一个是做底层的大语言模型的训练,另一个是基于大模型进行业务应用。Java最适合做的就是第二个方面,即基于大模型构建业务应用。由于过去大量的企业级应用都是使用Java开发的…

网络服务请求流程简单理解

网络流程: DNS负责将域名解析为IP地址,ALB可以在多个服务实例之间分配流量,APISIX作为API网关处理更细粒度的流量管理,Service在Kubernetes中为Pod提供稳定的访问入口,而Kubernetes则负责整个应用的部署、扩展和运维。…

Java项目-基于springboot框架的逍遥大药房管理系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【UML】一个UML学习的还不错的几个帖子

https://segmentfault.com/a/1190000042775634 寂然解读设计模式 - UML类图&类的六大关系-阿里云开发者社区

金融衍生品中的风险对冲策略分析

金融衍生品是现代金融市场中不可或缺的一部分,它们通过标的资产的价格波动为投资者提供了多样的风险管理工具。随着市场的不确定性和复杂性增加,风险对冲成为企业和个人投资者的首要任务。本文将深入探讨金融衍生品中的常见风险对冲策略,分析…

Java中Log4j的配置与使用详细解析

Log4j Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件。 也可以控制每一条日志的输出格式; 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 这些…