首页 > 编程语言 >Web 应用程序中进行多线程处理-Web Workers

Web 应用程序中进行多线程处理-Web Workers

时间:2023-09-12 14:34:22浏览次数:49  
标签:主线 Web Worker Workers worker postMessage 多线程

1、什么是Web Workers?

Web Workers API 是一组用于创建并在后台运行脚本的接口,以便在 Web 应用程序中进行多线程处理。它使得可以将一些耗时的计算任务放在单独的线程中执行,从而避免阻塞主线程,提高了应用程序的响应性能。

2、使用方式

以下是 Web Workers API 中常用的接口和方法:

Worker 构造函数:用于创建一个新的 Web Worker 对象,在新的后台线程中执行指定的 JavaScript 文件。

const worker = new Worker('worker.js');

onmessage 事件处理程序:用于在主线程中接收来自 Web Worker 的消息。

worker.onmessage = function(event) {
  // 处理来自 Web Worker 的消息
  console.log('Received message: ', event.data);
};

postMessage() 方法:用于向 Web Worker 发送消息。

worker.postMessage('Hello from main thread!');

onmessage 事件处理程序(Web Worker 内部):定义在 Web Worker 内部,用于接收来自主线程的消息。

self.onmessage = function(event) {
  // 处理来自主线程的消息
  console.log('Received message in Web Worker: ', event.data);
};

postMessage() 方法(Web Worker 内部):定义在 Web Worker 内部,用于向主线程发送消息。

self.postMessage('Hello from Web Worker!');

这些是 Web Workers API 中的一些常用接口和方法,可以帮助您在 Web 应用程序中使用多线程处理。请注意,Web Worker 运行在与主线程分离的上下文中,无法直接访问 DOM。它们通常用于执行独立的计算任务或处理大量数据。

3、举个在实际应用中的例子

index.html

<!DOCTYPE html>
<html>
<head>
  <title>Web Worker Example</title>
</head>
<body>
  <script>
    // 创建 Web Worker
    const worker = new Worker('worker.js');

    // 监听来自 Web Worker 的消息
    worker.onmessage = function(event) {
      // 接收并打印结果
      console.log('Result:', event.data);
    };

    // 向 Web Worker 发送消息,请求计算斐波那契数列的第10项
    worker.postMessage(10);
  </script>
</body>
</html>

worker.js(Web Worker):

// 定义斐波那契数列的计算函数
function fibonacci(n) {
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

// 监听来自主线程的消息
self.onmessage = function(event) {
  const n = event.data;

  // 调用计算函数并返回结果给主线程
  const result = fibonacci(n);
  self.postMessage(result);
};

在这个例子中,主线程创建了一个新的 Web Worker 对象,并发送消息给它。Web Worker 接收到来自主线程的消息后,在后台线程中进行斐波那契数列的计算,并将计算结果发送回主线程。主线程监听来自 Web Worker 的消息,并将结果打印到控制台。

当您在浏览器中打开 index.html 文件时,打开控制台会看到斐波那契数列的第10项计算结果。这个例子展示了 Web Worker 在后台执行耗时计算任务的能力,从而避免阻塞主线程。

请注意,由于 Web Worker 运行在与主线程分离的上下文中,它们无法直接访问 DOM 或主线程的其他 JavaScript 对象。因此,在 Web Worker 中不能使用 console.log() 打印日志信息,而是需要使用 postMessage() 方法将结果发送回主线程。

标签:主线,Web,Worker,Workers,worker,postMessage,多线程
From: https://www.cnblogs.com/never404/p/17696090.html

相关文章

  • [SpringSecurity5.2.2源码分析七]:WebAsyncManagerIntegrationFilter
    1、作用• 是为了接口返回异步对象,然后执行异步任务也能通过SecurityContextHolder获取SecurityContext• 比如说返回值是WebAsyncTask的时候2、WebAsyncManagerIntegrationFilter• 源码很短就是在WebAsyncManager中注册了SecurityContextCallableProcessingInterceptorpublic......
  • .NET中测量多线程基准性能
    多线程基准性能是用来衡量计算机系统或应用程序在多线程环境下的执行能力和性能的度量指标。它通常用来评估系统在并行处理任务时的效率和性能。测量中通常创建多个线程并在这些线程上执行并发任务,以模拟实际应用程序的并行处理需求。在此,我们用多个线程来完成一个计数任务,简单地......
  • 互联网视频云平台EasyDSS视频服务器无法登录Web页面的排查与解决方法
    EasyDSS互联网视频云服务可支持视频直播、点播,视频直播方面最多可分为十六屏进行实时直播,视频点播方面则有视频点播广场自由点播,灵活性非常强,可满足用户的多场景需求。 我们接收到用户较多的咨询是关于EasyDSS服务运行之后,无法登录Web的情况(如下图)。 排查思路其实遇到这个......
  • webScoket重连机制,心跳机制
    webScoket可以实时获取数据,做到实时渲染的效果,但ws一直连接着还好,万一网络波动,断了呢。。。。那只能刷新页面,重新连接,但又不晓得啥时候断了,这时候就要用到心跳机制,对ws进行监视//WebSocket连接地址constwsUrl=ref('')//Ws实例constws=ref()onMounted(()=>{......
  • web DevOps / engineer day04 /
    s今日总结:环境构建构建Yum仓库开机自动挂载修改UUID内容配置网络参数之主机名配置网络参数之IP地址与子网掩码、网关地址三种方式配置地址:nmcli方式利用nmtui修改IP地址、子网掩码、网关地址(了解)利用配置文件修改IP地址、子网掩码、网关地址(了解)总结(图-15)克隆虚拟机(......
  • react18-webchat网页聊天实例|React Hooks+Arco Design仿微信桌面端
    React18Hooks+Arco-Design+Zustand仿微信客户端聊天ReactWebchat。react18-webchat基于react18+vite4.x+arco-design+zustand等技术开发的一款仿制微信网页版聊天实战项目。实现发送带有emoj消息文本、图片/视频预览、红包/朋友圈、局部模块化刷新/美化滚动条等功能。使用技术......
  • 线程池|多线程
    什么是线程池?线程的引入是因为进程的花销很大,线程相较于进程的花销少了很多,但是随着并发程度提高,对性能的要求也提高,频繁的创建线程,销毁线程的开销似乎也挺大的,这种情况下,要想提高效率,就可以使用线程池来降低创建线程销毁线程的开销。线程池就是事先将需要的线程创建好,放到“池”......
  • security整合websocket
    快速使用@Configuration@EnableWebSocketMessageBrokerpublicclassWebSocketSecurityConfigextendsAbstractSecurityWebSocketMessageBrokerConfigurer{@AutowiredUserDetailsServiceImpluserDetailsService;@AutowiredRedisTemplate<St......
  • 海康工业相机使用Python成像,web实时预览(Linux)
    Python实现海康机器人工业相机的实时显示视频流及拍照功能(Linux)代码是在ubuntu系统的orinnano板子上跑的程序,有需要的大佬自行研究更改支持网口相机和usb口相机并且理论上window和Linux通用但是我没有试windows平台代码如下:importsysfromctypesimport*importo......
  • 安卓Termux搭建web服务器【公网远程手机Android服务器】
    概述Termux是一个Android终端仿真应用程序,用于在Android手机上搭建一个完整的Linux环境,能够实现Linux下的许多基本操作,不需要root权限Termux就可以正常运行。Apache是一个开源网页服务器软件,由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之一。我们可以在Android手......