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

这篇具有很好参考价值的文章主要介绍了Web Worker的概念、用法、使用场景。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章来源地址https://www.toymoban.com/news/detail-717609.html

目录

1. 简介

2. 适用场景

2.1 复杂计算

2.2 后台下载

2.3 数据处理

2.4 实时通信

3. 代码示例

3.1 Worker特性检测

3.2 Worker API

3.3 SharedWorker API

3.4 创建 JavaScript 文件

3.5 创建 Web Worker

4. 总结


1. 简介

Web Worker 使得在一个独立于 Web 应用程序主执行线程的后台线程中运行脚本操作成为可能。这样做的好处是可以在独立线程中执行费时的处理任务,使主线程(通常是 UI 线程)的运行不会被阻塞/放慢。

2. 适用场景

2.1 复杂计算

当涉及到大量计算或复杂的数据处理时,可以将这些操作放在 Web Worker 中进行,避免阻塞主线程。例如,图像处理、音频处理、视频处理等。

2.2 后台下载

当需要下载大量数据时,可以使用 Web Worker 在后台进行数据的下载和处理,以避免阻塞用户界面。例如,从服务器获取大量数据并进行处理之后再展示给用户。

2.3 数据处理

当需要对大量数据进行处理或者排序时,可以使用 Web Worker 将处理逻辑放在后台线程中进行,提高处理的效率。

2.4 实时通信

可以使用 Web Worker 来处理实时通信的逻辑。在主线程可以与 Web Worker 进行通信,从而实现实时的数据交换。

3. 代码示例

3.1 Worker特性检测

因部分浏览器可能不支持Worker特性,所以为了更好的向下兼容,可以将你的 worker 运行代码包裹在以下代码中(如App.js):

if (window.Worker) {
   // 说明当前浏览器支持使用Worker特性
   // TODO 可初始化Worker
} else {
   // TODO 做其他兼容性处理 
}

3.2 Worker API

Worker 接口是 API 的一部分,指的是一种可由脚本创建的后台任务,任务执行中可以向其创建者收发信息。要创建一个 Worker,只须调用 Worker(URL) 构造函数,函数参数 URL 为指定的脚本。

Worker 也可以创建新的 Worker,当然,所有 Worker 必须与其创建者同源。

支持浏览器:

webworker,Web,TypeScript,web,javascript

3.3 SharedWorker API

SharedWorker 接口代表一种特定类型的 worker,可以从几个浏览上下文中访问,例如几个窗口、iframe 或其他 worker。它们实现一个不同于普通 worker 的接口,具有不同的全局作用域。

注意 如果要使 SharedWorker 连接到多个不同的页面,这些页面必须是同源的(相同的协议、host 以及端口))

支持浏览器:

webworker,Web,TypeScript,web,javascript

3.4 创建 JavaScript 文件

首先,我们创建一个名为worker.js的文件,比如用来处理网络数据。worker.js将接收到的数据进行处理,并将处理后的结果发送回主线程。

webworker,Web,TypeScript,web,javascript

// 监听消息事件
onmessage = (e) => {
  // 获取传递的数据
  const data = e.data;
  
  // TODO 在此处进行数据的处理,并返回结果
  // 模拟数据处理
  setTimeout(() => {    
    // 将处理结果发送给主线程
    postMessage(data);
  }, 1000);
};

3.5 创建 Web Worker

在主线程的App.js中,我们仍然使用了useStateuseEffect来管理组件的状态和副作用。在useEffect中,我们创建了Web Worker的实例,并使用onmessage来监听Worker发送的消息。当Worker发送消息时,我们更新组件的结果状态。在组件卸载时,我们终止了Worker实例的运行。在按钮的点击事件中,我们使用worker.postMessage方法向Worker发送数据以进行处理。当Worker返回结果时,我们可以在组件中显示它。

import React, { useState, useEffect, useRef } from 'react';

function App() {
  const [result, setResult] = useState(null);
  const workerRef = useRef(null);

  useEffect(() => {
    // 创建Web Worker实例
    workerRef.current = new Worker('worker.js');

    // 监听Worker的消息事件
    workerRef?.current?.onmessage = (e) => {
      // 接收到Worker的消息
      setResult(e.data);
    };

    return () => {
      // 组件卸载时,终止Worker实例
      workerRef?.current?.terminate();
    };
  }, []);

  const handleClick = () => {
    // 启动Worker,并传递数据
    workerRef?.current?.postMessage('Data to be processed');
  };

  return (
    <div>
      <button onClick={handleClick}>Start Processing</button>
      <div>{result}</div>
    </div>
  );
}

export default App;

webworker,Web,TypeScript,web,javascript

4. 总结

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

(如有帮助,请记得点赞三连哦~)

到了这里,关于Web Worker的概念、用法、使用场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础教程】(四)程序概念篇 · 中:探索Java编程基础,解析各类运算符功能、用法及其应用场景~

    掌握Java中各类运算符及其运算使用; Java中的语句有很多种形式,表达式就是其中一种形式。 Java中的表达式由操作数、运算符、结果类型和求值顺序等元素组成 ,这些元素共同构成了复杂的逻辑和计算过程。 操作数(Operands) :操作数是表达式中的值或者变量,它们可以是

    2024年02月12日
    浏览(47)
  • TypeScript 泛型的概念和基本使用

    在定义函数,接口,类的时候不能预先确定使用的数据类型,而是在调用使用这些函数,接口,类的时候才能确定的数据类型; 1,单个泛型的参数 例如通过使用any这种方式,value1的类型随着传入的类型数据而变化: 改为泛型之后: 2,多个泛型的参数 3,泛型接口 泛型接口

    2024年02月13日
    浏览(30)
  • Vue 中使用 WebWorker

    目录 安装 loader 应用场景 打包时错误处理 如果直接把worker.js放到public目录下,则不需要安装loader vue.config.js index.vue demo.worker.js 浏览器的JS线程和GUI渲染线程互斥 在主线程跑吃性能的同步任务,GUI渲染线程会挂起,页面不能及时响应渲染 在worker跑时,GUI渲染线程不会被挂起,

    2024年02月13日
    浏览(23)
  • pytorch 分布式 Node/Worker/Rank等基础概念

    分布式训练相关基本参数的概念如下: Definitions Node  - A physical instance or a container; maps to the unit that the job manager works with. Worker  - A worker in the context of distributed training. WorkerGroup  - The set of workers that execute the same function (e.g. trainers). LocalWorkerGroup  - A subset of the workers in the worker g

    2024年02月02日
    浏览(34)
  • HTML5 Web Worker

    HTML5 Web Worker是一种浏览器提供的JavaScript多线程解决方案,它允许在后台运行独立于页面主线程的脚本,从而避免阻塞页面的交互和渲染。Web Worker可以用于执行计算密集型任务、处理大量数据、实现并行计算等,从而提升前端应用的性能和响应能力。 特点和用途: 多线程:

    2024年02月14日
    浏览(24)
  • 2023 年的 Web Worker 项目实践

    目录 前言 引入 Web Worker Worker 实践 Worker 到底有多难用 类库调研 有类库加持的 worker 现状 向着舒适无感的 worker 编写前进 1. 抽取依赖,管理编译和更新: 2. 定义公共调用函数,引入所打包的依赖并串联流程: 3. 优化语法支持 4. 其他问题 总结 参考资料     Web Workers  是

    2024年02月07日
    浏览(22)
  • html5学习笔记18-web存储、web sql、web worker

    https://www.runoob.com/html/html5-webstorage.html HTML5 web 存储,可替代 cookie 的本地存储方式。 客户端存储数据的两个对象:localStorage网站的 sessionStorage窗口的 web db sql web worker

    2024年02月10日
    浏览(34)
  • HTML5 Web Worker之性能优化

    描述 由于 JavaScript 是单线程的,当执行比较耗时的任务时,就会阻塞主线程并导致页面无法响应,这就是 Web Workers 发挥作用的地方。它允许在一个单独的线程(称为 工作线程 )中执行耗时的任务。这使得 JavaScript 代码可以在后台执行,而不会阻塞主线程并导致页面无响应。

    2024年03月16日
    浏览(39)
  • ADB的概念、使用场景、工作原理

    adb全称(Android Debug Bridge),它是一个通用命令行工具,它可以做为Android与PC端连接的一个桥梁,所以adb又称为Android调试桥,用户可以通过adb在电脑上对Android设备进行全面操作,比如安装和调试应用,操作文件的传输等。 采用了客户端-服务器(C/S)模型,包括三个部分: 客户

    2024年02月07日
    浏览(37)
  • ElasticSearch 的核心概念和使用场景

    作者:禅与计算机程序设计艺术 ElasticSearch 是一种开源的分布式搜索和分析引擎。基于 Lucene 搜索框架,它提供了一个高效、可靠、快速的搜索和数据分析解决方案。它具有云计算和超大规模的搜索功能。ElasticSearch 最初由 Elasticsearch 公司开发并于 2010 年 9 月份推出首个版本。

    2024年02月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包