关于Web Worker应用

Vue中的Web Worker实际应用 Vue中的Web Worker可以与主线程进行通信,使得我们能够将一些复杂的任务交给Web Worker处理,然后在主线程中处理结果。在这个示例中,我们在created钩子函数中创建了一个Web Worker实例,并通过addEventListener方法监听Web Worker发送的消息。接下来,我们需要在Vue组件中使用Web Worker。假设我们有一个名为WorkerComponent的组件,我们可以在这个组件中引入刚刚创建的worker.js文件,并与Web Worker进行通信。 阅读详情

1、Web Worker介绍

Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。

Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。

2、Web Worker注意事项

1、同源限制

分配给 Worker 线程运行的脚本文件,必须与主线程的脚本文件同源。

2、DOM 限制

Worker 线程所在的全局对象,与主线程不一样,无法读取主线程所在网页的 DOM 对象,也无法使用document、window、parent这些对象。但是,Worker 线程可以navigator对象和location对象。

3、通信联系

Worker 线程和主线程不在同一个上下文环境,它们不能直接通信,必须通过消息完成
。

4、脚本限制

Worker 线程不能执行alert()方法和confirm()方法,但可以使用 XMLHttpRequest 对象发出 AJAX 请求。

5、文件限制

Worker 线程无法读取本地文件,即不能打开本机的文件系统(file://),它所加载的脚本,必须来自网络。

3、代码

1、编写worker.js的代码
//监听message事件
self.addEventListener('message', function (e) {
	let data = e.data;
	let type = data.type;
	let list = data.list;
	switch(type){
		case 'device': 
		    //触发postMessage,传输相关数据,通过type区分相关的事件类型,对数据做不同的处理
			this.self.postMessage({
				type: type,
				list: getDevice(list)
			});
			break;
		case 'pkCompany': //对比公司数据是否刷新
			this.self.postMessage({
				type: type,	
				data: pkCompany(list,data.msg),
			});
			break;
		case 'pkDevice': //对比设备数据
			this.self.postMessage({
				type: type,
				data: pkDevice(list,data.msg)
			});
			break;
		default: break;
	}

}, false);
//通过设备的二次码状态计算,一个设备的状态,若某个点(相关经纬度有多个设备),通过设备列表计算,该点的状态
const getDevice = (list) => {
    
    //在这里进行相关计算,返回需要的数据
    
    return ...;
}
//相关计算方法
...
2、导入上面的js文件,创建Worker
//开启新线程用于计算相关数据
created() {
    this.startWorker();
}
methods:{
    startWorker(){
        this.worker = new Worker('./static/script/worker.js');
        this.workerOnMessage();
    },   
}
3、页面传输数据到worker.js中
//获取报警消息
getAlarmDeviceInfo(){
    let params = {};
    $xh.http({
        type: 'get',
        url: url,
        params: params
    })
    .then(res=>{
        let list = res.data;
        this.worker.postMessage({
            type: 'device',
            list: list,
            msg: {}
        });
    })
    .catch(err=>{
        console.log(err);
    })
},
4、监听线程返回的数据
//监听新线程传回来的数据
workerOnMessage(){
    this.worker.onmessage = (e)=>{
        let data = e.data;
        let type = data.type;
        let list = [];
        switch(type){
            case 'device': 
                this.markerDeviceData = data.list;
                this.addMarkerDevice();
            break;
            case 'pkCompany':
                let companyObj = data.data;
                if(companyObj.list.length === 0)return;
                if(this.selectUser.type === 2)return;
                if(companyObj)
                this.updatedCompanyMarker(companyObj);
            break;
            case 'pkDevice':
                let deviceObj = data.data;
                if(deviceObj.indexList.length === 0)return;
                this.updatedDeviceMarker(deviceObj);
            break;
            default:break;
        }
    }
},
基于深度学习YOLOv8的花卉检测与识别系统(附完整资源+PySide6界面+训练代码) 通过本项目,我们成功实现了基于YOLOv8的花卉检测与识别系统,涵盖了数据预处理、模型训练、推理与实时检测、以及GUI界面的实现。YOLOv8在花卉检测中的高效性和准确性为实际应用提供了强有力的支持。 阅读详情

相关推荐

计算机保研/考研面试题——计算机组成原理篇

本文总结了985和华五学校习计算机保研/考研常问面试时的计算机组成原理题,欢迎点赞、收藏、评论、关注

安晴晚风的博客 7547

Web worker

Web worker

xixiaodou的博客 625

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 211

web worker 在开发环境不能调用本地workjs吗?

Web Worker在开发环境中不能直接调用本地的Worker脚本(.js文件),因为Worker线程无法读取本地文件(file://)。这是由于浏览器的安全策略所限制的。安全错误:位于 file:///D:/Vue_vue/TsDemo/index.html 的内容不可以加载来自 file:///D:/Vue_vue/TsDemo/worker.js 的数据。Worker脚本(worker.js)必须通过网络地址(例如http://example.com/worker.js)来加载,而不是本地文件路径。

蓝斑.json的博客 1204

TESSY创建单元测试或集成测试工程

我们以tessy5.1为例,给大家展示单元测试和集成测试工程的创建过程。

空气中的告白专栏 1686

AURIX-TC3xx-GTM详解六-DPLL(Digital PLL Module)-寄存器1-DPLL寄存器

主要有下图这些寄存器2、

m0_69929716的博客 440

js 中 new Worker 报错 Failed to construct ‘Worker‘

原因是浏览器不允许通过本地文件访问使用Web Worker。将项目部署到服务器上或者用node起本地服务访问项目。运行多线程 Web Worker 的时候报错。

Misnice的博客 831

抖音直播小风车跳转企业微信全攻略:企业号申请+落地页配置详解

本文详细解析了抖音直播小风车跳转企业微信的全流程,包括企业号申请、小风车配置和落地页优化。通过实战指南,帮助企业高效实现私域流量沉淀,提升直播转化率,特别适合电商和营销从业者参考。

weixin_29289821的博客 613

web worker使用

JavaScript的一个特性就是单线程,web worker的出现解决了JavaScript无法多线程的问题,定义了“Worker”来执行代码的并行线程。 web worker有许多使用上的限制: 1、web worker中无法访问window对象和document对象。 2、和主线程直接的通信只能通过异步消息传递机制来实现。 3、不适宜创建很多的web worker; ...

first_shun的博客 805

路径规划 | 图解RRT*算法(附ROS C++/Python/Matlab仿真)

RRT*算法针对传统RRT算法进行了渐进最优改进,在添加节点到搜索树的过程中进行重连选择。本文图解RRT*算法原理,并采用ROS C++、Python、Matlab三种语言实现算法,加深理解

FRIGIDWINTER的博客 9405

AgentScope Java 2.0 项目实战: 从零构建自己的个人AI助手“小龙虾“

本文系统介绍如何基于Spring Boot WebFlux、React 18和TypeScript,从零搭建一个本地化的个人AI助手管理平台——AgentScope Paw。项目支持多Agent创建与管理、SSE流式对话、工作区文件CRUD、技能市场、子智能体孵化、AI辅助起草Agent配置等核心功能,并深度集成钉钉、企业微信、飞书、GitHub等IM通道。

program哲学 1427

详解 WebWorker 的概念、使用场景、示例

WebWorker 是 HTML5 新引入的一种技术,旨在为 Web 内容在后台运行脚本提供一种简单的方法。这样可以允许将一些大量计算工作分配到后台线程中运行,而不产生浏览器不响应或重新渲染的问题,从而可以保证程序的顺畅运行。WebWorke r是一种在 Web 应用中实现多线程运行的技术,可以将耗费 CPU 的任务交给后台线程处理,避免阻塞主线程,从而提高Web应用的响应性能和用户体验。

chenyajundd的博客 8561

全15万字丨PyTorch 深度学习实践、基础知识体系全集;忘记时,请时常回顾。

本篇博客介绍的知识是——深度学习之PyThon框架基础。这是深度学习/神经网络的基础,多次回顾,会有不一样的感受。书读百遍,其义自见。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 5788

如何用 Web Worker和Service Worker提升 web 应用体验

众所周知,Javascript 由于它的单线程特性,任何“重量”操作都会阻塞主线程,让我们的应用变得卡顿、看起来没有响应。为了提升性能和体验,现代浏览器允许我们将一些工作交给 Worker,把原本的单线程应用变成多线程运行。Worklet 似乎是专为媒体之类的应用设计,且仍处于试验状态。因此,本篇内容将只探讨更通用的 Web worker 及 Service worker。

蛋黄酱来一勺 622

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

basic-service-worker:为您的Web应用提供离线工作能力

basic-service-worker:为您的Web应用提供离线工作能力 在当今快节奏的互联网时代,用户体验是Web应用成功的关键。然而,网络不稳定或中断常常会影响用户的浏览体验。basic-service-worker 是一个简单易用的Service Worker解决方案,它可以让您的Web应用即使在离线状态下也能正常工作。 项目介绍 basic-service-worker 是一个基本的Se...

gitblog_00566的博客 1004

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Web Worker在uniapp鸿蒙APP中的深度应用

独立线程:运行在独立于UI线程的全局上下文中无阻塞:不会影响页面响应速度和渲染性能受限环境:无法直接操作DOM,通过消息机制与主线程通信兼容性:鸿蒙OS 3.0+完美支持,uniapp已做好适配层。

你的童年,我的童年,好像不一样。 1395

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

离线应用和web worker

只当自己笔记一样,把自己看的资料整理一下而已,勿喷! 搭建离线应用可以适用于一些小的应用场景。感觉目前用的也不是很多,分为以下几步: ①找到服务器的配置文件,设置头信息 : AddType text/cache-manifest .manifest ② html标签加 : manifest=“xxxxx.manifest”,例如: <html manifest="cac...

weixin_30873847的博客 94

Web Worker技术详解与应用场景

Web Worker是解决JavaScript单线程限制的关键技术,通过创建独立后台线程执行耗时任务,避免主线程阻塞。它无法访问DOM/BOM,只能通过消息机制与主线程通信。主要分为专用Worker、共享Worker和服务Worker三类。使用时需注意通信开销、同源策略及错误处理等问题。Web Worker适用于复杂计算、图像处理等CPU密集型任务,能显著提升网页性能和响应速度。最佳实践包括优化数据传输、合理评估开销和使用Transferable对象等。

记录来时的路 880

Web Worker 剖析与应用

Web Worker 是 HTML5 引入的 JavaScript 多线程解决方案,允许主线程(UI 线程)创建后台线程(Worker 线程),在不阻塞主线程的情况下执行耗时操作(如复杂计算、大数据处理等),从而避免页面卡顿,提升用户体验。JavaScript 本质是单线程语言(同一时间只能执行一个任务),Web Worker 突破了这一限制,使 CPU 密集型任务可以在后台并行处理。

codingMan_09的博客 862

Web Worker 通信封装与实战应用详解

方案说明基础 Worker利用 postMessage / onmessage 传值封装类更利于复用、统一管理 Worker 生命周期Vue 实战结合大数据列表 / 虚拟滚动使用效果最佳使用 Web Worker 是前端提升性能的强大武器,尤其适合大数据或复杂计算场景。数据导入解析(如 CSV、Excel)图像处理(灰度、滤镜)实时图表计算(Echarts 动态数据)AI 模型推理(TinyML)语音转文字、实时字幕(Web Speech API)

Jinxiansen0211的博客 1019

Web Worker 应用场景和实现

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

weixin_41018853的博客 1105

提升Web应用性能的利器:worker-pouch

提升Web应用性能的利器:worker-pouch 项目介绍 worker-pouch 是一个强大的PouchDB适配器插件,它利用Web Workers和Service Workers技术,将PouchDB的数据库操作转移到独立的线程中执行。通过这种方式,worker-pouch能够显著减少UI线程的阻塞,从而提升Web应用的整体性能和响应速度。 项目技术分析 worker-pouch的核心技术...

gitblog_00212的博客 622

Ebitengine多线程:Web Worker并行计算应用

在现代游戏开发中,性能优化始终是开发者面临的核心挑战。随着WebAssembly技术的成熟,越来越多的游戏引擎开始支持Web平台,而Ebitengine作为Go语言的2D游戏引擎,在多线程和并行计算方面提供了强大的能力。本文将深入探讨如何在Ebitengine中利用多线程和Web Worker实现高效的并行计算。 ## Ebitengine并发架构解析 ### 线程模型设计 Ebitengi...

gitblog_00254的博客 1054

Service Worker:让你的 Web 应用牛逼起来

前言 本文首先会简单介绍下前端的常见缓存方式,再引入serviceworker的概念,针对其原理和如何运用进行介绍。然后基于google推出的第三方库workbox,在产品中进行运用实践,并对其原理进行简要剖析。 前端缓存简介 先简单介绍一下现有的前端缓存技术方案,主要分为http缓存和浏览器缓存。 http缓存 http缓存都是第二次请求时开始的,这也是个老生常谈的话题了。无非也是那几个http头的问题: Expires HTTP1.0的内容,服务器使用Expires头来告诉Web客户端它可以使用当前副本

Banjiyong216的博客 399

前端性能优化之多线程 Web Worker 应用实战指南

Web Worker 技术解析与实践 Web Worker 是 HTML5 提供的多线程解决方案,允许在后台运行 JavaScript 代码,避免阻塞主线程。其核心优势包括提升页面响应性、利用多核CPU和大数据处理能力,但存在无法访问DOM、通信开销等限制。使用时需注意控制数据量、完善错误处理和及时释放资源。典型应用包括图像处理等计算密集型任务,通过 postMessage 实现主线程与 Worker 间的通信。示例展示了图像灰度处理的实际实现,体现了 Worker 在性能敏感场景下的价值。开发者应权衡其优

qq_33254736的博客 1074

渐进式 Web 应用 (PWA) 理论篇之 Service Worker

作者 | 宁旭初1万小时的锤炼是任何人从平凡变成超凡的必要条件前言PWA(Progressive Web Apps) 即渐进式网络应用程序,由于其出色的用户体验,正在变得越来越流行。如果...

杏仁技术站 712
上一篇: Echarts + 中国地图+事件报警撒点
下一篇: 关于版本迭代后用户停留在之前版本页面,导致某些功能无法使用的解决方案
cjvalue
博客等级 码龄8年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值