Web Worker的了解

OpenHarmony实战开发-Worker子线程中解压文件。 本示例介绍在Worker 子线程使用@ohos.zlib 提供的zlib.decompressfile接口对沙箱目录中的压缩文件进行解压操作,解压成功后将解压路径返回主线程,获取解压文件列表。 阅读详情

Web Worker

Web Worker让你可以在独立的线程运行一个JavaScript文件,使用异步事件在线程之间传递消息。它们非常适用于把长时间的或资源密集型的任务卸载到不同的线程中,以提高主UI线程的响应性。

Web Worker 介绍

JavaScript当前并没用任何支持多线程执行的功能,而像程序中每一个这样的独立的多线程部分被称为一个(Web)Worker, 这种类型的并行化被称为任务并行,因为其重点在于把程序划分为多个块来并发运行。

在js 主程序中,可以这样实例化一个Worker:

var w1 = new Worker(‘http://…’);
这个url 应该指向一个JavaScript文件的位置,这个文件将被加载到一个Worker中; 然后浏览器启动一个独立的线程,让这个文件在这个线程中作为独立的程序运行。

Worker 之间以及它们和主程序之间,不会共享任何作用域或资源,那会把所有多线程编程的噩梦都带到前端领域,而是通过一个基本的事件消息机制相互联系。 Worker w1 对象是一个事件侦听者和触发者,可以通过订阅它来获得这个Worker 发出的事件以及发送事件给这个Worker。

以下是如何侦听事件:

w1.addEventListener(“message”, function(e) {

});
也可以发送“message” 事件给这个Worker

w1.postMessage(“hello for you”);
在这个Worker 内部,收发消息是完全对称的:

// “helloworker.js”
addEventListener(“message”, function(e) {

});
postMessage(“hello for you reply”);
Worker 的环境:
在Worker内部是无法访问主程序的任何资源的,这意味着你不能访问它的任何全局变量,也不能访问页面的DOM或者其他资源; 这是一个完全独立的线程。

不过,你可以访问网络操作(ajax, WebSocket)以及定时器; Worker可以访问几个重要的全局变量和功能的本地复本,如:navigator,location,JSON 和 applicationCache。

Worker 的应用:

(1)、处理密集型数学计算;
(2)、高流量网络通信;
(3)、大数据集排序;
(4)、数据处理,如:压缩,音频分析、图像处理等

共享Worker

如果你的站点或app 允许加载同一个页面的多个tab,那你可能非常希望通过防止重复使用Worker 来降低系统的资源使用; 在这一方面最常见的就是socket网络连接,因为浏览器限制了同一个主机的同时连接数目。当然,限制来自于同一客户端的连接数也减轻了你的资源压力。

在这个时候,创建一个整个站点或app的所有页面实例都可以共享的中心Worker就非常有用了。 这被称为ShareddWorker,可以通过下面的方式创建(只有Chrome 和 Firefox支持这一个功能)

var w1 = new SharedWorker("http://...");

因为共享 Worker 可以与站点的多个程序实例或多个页面连接,所以这个 Worker 需要通过 某种方式来得知消息来自于哪个程序。这个唯一标识符称为端口(port),可以类比网络 socket 的端口。因此,调用程序必须使用 Worker 的 port 对象用于通信:

w1.port.addEventListener("message", handleMessages);
w1.port.postMessage("something...");

还有端口连接必须要初始化:

w1.port.start();

在共享 Worker 内部,必须要处理额外的一个事件:“connect”。这个事件为这个特定的连 接提供了端口对象。保持多个连接独立的最简单办法就是使用 port 上的闭包(参见本系列 《你不知道的 JavaScript(上卷)》的“作用域和闭包”部分),就像下面的代码一样,把这 个链接上的事件侦听和传递定义在 “connect” 事件的处理函数内部:

//在共享Worker内部
addEventListener("connect", function(e){
    // 这个连接分配的端口
    var port = e.ports[0];
    port.addEventListener("message", fucntion(e) {
        port.postMessage("...");     
    });
    //初始化端口连接
    port.start();
});
HTML5之多线程(Web Worker) 这篇文章主要介绍了HTML5之多线程(Web Worker)的相关资料,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 提到 HTML5 总是让人津津乐道,太多的特性和有趣的 API 让人耳目一新。但是很多童鞋还停留在语义化的阶段,忽视了 HTML5 的强劲之处。 这节我们来探讨一下多线程 Web-Worker。 一、明确 JavaScrip... 阅读详情

相关推荐

如何让前端拥有后端的计算能力?十万、百万条数据都是弟弟,一文彻底了解Web Worker

页面中有十万条数据,对其进行复杂运算,需要多久呢? Web Worker为前端带来了后端的计算能力,十万、百万条数据都是弟弟。 Web Worker扩大了前端的业务边界,减轻了因大量计算造成的UI阻塞

m13837120071的博客 1134

鸿蒙OpenHarmony多线程能力场景化示例实践

在OpenHarmony应用中,每个 进程 都会有一个主线程,主线程主要承担执行UI绘制操作、管理ArkTS引擎实例的创建和销毁、分发和处理事件、管理Ability生命周期等职责,具体可参见 线程模型概述。因此,开发应用时应当尽量避免将耗时的操作放在主线程中执行。ArkTS提供了Worker和TaskPool两种多线程并发能力,多线程并发允许在同一时间段内同时执行多段代码,这两个并发的基本能力可参见 TaskPool和Worker的对比。在介绍Worker和TaskPool。

1 1911

Android AI Agent集成实战:架构设计与自动化技能开发

AI Agent(人工智能代理)是一种能够感知环境、自主规划并执行任务以达成目标的软件实体。其核心原理在于结合大语言模型的推理能力与工具调用(Tool Calling)技术,使应用从被动响应转向主动服务。在移动开发领域,这项技术的价值在于为应用注入“智能大脑”,实现跨应用自动化与个性化交互,从而显著提升用户体验和操作效率。具体到Android平台,其应用场景广泛,例如自动填写表单、智能聊天辅助、个性化工作流优化等。本文聚焦于Android AI Agent的工程化落地,深入探讨了如何利用Accessibil

weixin_42636895的博客 661

鸿蒙「TaskPool|Worker」多线程并发使用详解,这一篇足够!

CPU密集型任务,说白了是计算型耗时任务; I/O密集型任务,说白了是读写型耗时任务; 官方文档重点介绍了这两种基于多线程并发机制处理任务类型,我们是要深度思考下的?!「很有意义」,是否已经包含且指明了我们使用「TaskPool/Worker」来解决项目问题的方案呢? 对Worker以及TaskPool的使用详解,个人准备以一种特别的角度来详述。从我个人初始接触及学习研究的视角,针对 `如何选用`、`如何创建`、`如何使用`、`注意事项`和`条件限制` 多个方面,全面剖析。

文化园 4702

GPU八卡A100使用INT4-W4A16量化大模型实验

本实验旨在探索在环境下,对大语言模型进行权重量化的可行性、效率与性能影响。通过采用工具集成 GPTQ 算法,实现对所有线性层的权重量化(W4A16 方案最终通过lm-eval工具在GSM8K任务上对压缩模型进行评估。

goodgood_UP的博客 1908

关于DEJA_VU3D - Cesium功能集专栏说明

专栏主要目的是对工作中基于Cesium实现过的功能进行整合,暂时打算一周2-3更的样子来更新,每一篇都会奉上完整源代码(尽可能把代码简洁一些)。功能实现大多数是自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的更新。..........................................

总得学点什么的博客 2万+

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程并发 Worker

鸿蒙 harmonyos 多线程并发 worker的使用

qq_28641891的博客 2124

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

Airtest进阶篇,主要分享如何提高脚本稳定性+如何批量运行脚本生成测试报告!

程序员小杨哥的博客 2569

Web Worker的概念、用法、使用场景

通过以上的示例,您创建了一个名为 worker.js 的 JavaScript 文件,并使用 new Worker() 方法在主线程中创建了一个 Web Worker。主线程通过 worker.postMessage() 向 Web Worker 发送消息,并通过 worker.onmessage 监听从 Web Worker 接收到的消息。在 Web Worker 的代码中,通过 self.postMessage() 将结果发送回主线程,并在主线程中处理和输出结果。​。

qq_33539839的博客 1万+

多模态论文笔记——BLIP

本文详细介绍这几年AIGC火爆的隐藏功臣,多模态模型:BLIP。

haopinglianlian的博客 2454

结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式

高速列车是现代交通运输的重要组成部分,其运行速度高、载客量大,对安全性和可靠性提出了极高的要求。轴箱轴承作为高速列车的关键部件之一,承担着传递载荷和支撑车轴的重要作用。然而,由于长期运行在高速、重载和复杂工况下,轴箱轴承容易出现疲劳磨损、润滑失效和裂纹等故障,从而影响列车的安全性。本项目旨在结合MATLAB/Simulink和多体动力学仿真软件UM(Universal Mechanism),建立高速列车轴箱轴承的动力学模型,并通过联合仿真分析其正常运行特性和典型故障模式。

xiaoheshang_123的博客 329

一文了解Web Worker

Web Worker是 HTML5 标准的一部分,这一规范定义了一套 API,允许开发者在 JavaScript 主线程之外开辟新的 Worker 线程,并允许将一段 JavaScript 脚本运行其中。Web Worker的出现,赋予了开发者操作多线程的能力。因为是独立的线程,Worker 线程与JavaScript主线程是能够同时运行的,且互不阻塞。

xiangzhihong8的专栏 3669

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

本文给出了GTM与EVADC之间关联的细节,并通过两个实例分别说明了如何对寄存器进行配置。

无所适从的我的博客 2932

web worker的了解

如,MDN文档中介绍的那样,使用demo如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1....

TF16949的博客 271

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

了解web Worker实现多线程工作

Js是单线程的,也就是任务得一件件的按照顺序处理,前面的任务没有处理完成,后面的只能等着。但是随着科技的发展,现在的计算机都是多核的CPU,单线程无法发挥计算机的能力。WebWorker的作用就是在js主线程上创建一个辅助线程(Worker线程),将一些任务分配给Worker线程运行。两个线程互不干扰,也能相互通信。用户在主线程上进行UI交互时,不会卡顿和阻塞。Worker线程也不会因为主线程交互而被打断。这个和之前的很类似注意,Worker线程比较耗费资源,不应该过度使用,任务完成后要关闭。......

我叫火柴 1511

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

一文彻底了解Web Worker,十万、百万条数据都是弟弟

点击上方前端Q,关注公众号回复加群,加入前端Q技术交流群作者:海阔_天空https://juejin.cn/post/7137728629986820126页面中有十万条数据,对其进行复杂运算,需要多久呢?表格4000行,25列,总十万条数据运算包括:总和、算术平均、加权平均、最大、最小、计数、样本标准差、样本方差、中位数、总体标准差、总体方差答案是:35s 左右注:具体时间根据电脑配置会有所...

LuckyWinty的博客 1046

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

一文彻底了解Web Worker,十万条数据都是弟弟

点击上方程序员成长指北,关注公众号 回复1,加入高级Node交流群今天为大家分享一篇关于web worker的优质文章,让你了解一下如何通过Web Worker来解决前端处理大量数据运算时页面假死的问题。以下是正文:如何让前端拥有后端的计算能力,在算力紧缺的年代,扩展前端的业务边界!前言页面中有十万条数据,对其进行复杂运算,需要多久呢?表格4000行,25列,共十万条数据运算包括:总和、算术平均...

程序员成长指北 259

多线程Javascript深入了解 Web Worker

单独的文件是必需的,因为 Web 工作者代码需要在隔离的线程中运行。一个有用的提示是,虽然 worker.addEventListener 和 worker.postMessage 的顺序无关紧要,但我们在发送消息之前创建监听消息的能力是合乎逻辑的。在上面的代码中,我们发送消息“祝我生日快乐!现在为了让我们的工作人员听到“生日快乐”消息,我们必须在 worker.js 文件中为消息事件设置一个事件侦听器。我们的应用程序在 main.js 中创建了一个网络工作者,它运行来自 worker.js 的代码。

u011748886的博客 293

通过一次实验来了解HTML5的 Web Worker

web worker 是运行在后台的 JavaScript,不会影响页面的性能。 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。 web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。   以上是W3School对W...

weixin_30555515的博客 98

前端面试题:1.说说对 web worker的了解 2.HTTP和HTTPS的区别

它的作用就是给JS创造多线程运行环境,允许主线程创建worker线程,分配任务给后者,主线程运行的同时worker线程也在运行,相互不干扰,在worker线程运行结束后把结果返回给主线程。不过因为worker一旦新建,就会一直运行,不会被主线程的活动打断,这样有利于随时响应主线程的通性,但是也会造成资源的浪费,所以不应过度使用,用完注意关闭。●同源限制 worker线程执行的脚本文件必须和主线程的脚本文件同源,这是当然的了,总不能允许worker线程到别人电脑上到处读文件吧。

xiaolu567的博客 1971

一文带你看懂 Web Worker

以前我们总说,JS是单线程没有多线程,当JS在页面中运行长耗时同步任务的时候就会导致页面假死影响用户体验,从而需要设置把任务放在任务队列中;执行任务队列中的任务也并非多线程进行的,然而现在HTML5提供了我们前端开发这样的能力 - Web Workers API,我们一起来看一看 Web Worker 是什么,怎么去使用它,在实际生产中如何去用它来进行产出。 1. 概述 Web Workers ...

chen801090的博客 452

如何让前端拥有后端的计算能力?一文彻底了解Web Worker,百万条数据计算都是弟弟

Web Worker为前端带来了后端的计算能力,扩大了前端的业务边界可以实现主线程与复杂计运算线程的分离,从而减轻了因大量计算而造成UI阻塞的情况并且更大程度地利用了终端硬件的性能。

2401_83384536的博客 1131
上一篇: js实现单例模式
loringray
博客等级 码龄9年 20粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值