【HTML】web worker

Web Worker是HTML5中的一项技术,可以在后台运行JavaScript代码,以提高Web应用程序的性能并改善用户体验。它允许在独立的线程中执行耗时的操作,而不会阻塞主线程。

主线程是浏览器用来渲染页面、处理用户交互和执行JavaScript代码的线程。然而,在执行一些复杂的任务时,主线程可能会被占用并导致页面变得卡顿或不响应。

Web Worker通过将任务分配给后台线程来解决这个问题。后台线程是独立于主线程的,它可以同时执行多个任务(js脚本)而不会阻塞页面的渲染和用户交互。

使用Web Worker的基本步骤如下:

  1. 在主线程中创建一个Web Worker对象,并指定要执行的JavaScript文件。

  2. 在Web Worker脚本文件中编写逻辑代码,该文件将在后台线程中执行。

  3. 通过Web Worker对象与后台线程进行通信。主线程可以向后台线程发送消息,后台线程也可以向主线程发送消息。

  4. 后台线程执行完任务后,将结果发送回主线程,主线程可以捕获并处理这些结果。

实例如下:

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
   <style>

   </style>
</head>

<body>
   <script>
      const worker1 = new Worker('worker1.js');
      const worker2 = new Worker('worker2.js');
      const worker3 = new Worker('worker3.js');
      worker1.onmessage = e => {
         console.log(e);
      }
      worker2.onmessage = e => {
         console.log(e.data);
      }
      worker3.onmessage = e => {
         console.log(e.data);
      }
      
   </script>
</body>

</html>
js 复制代码
// worker1.js
function fb(n) {
   if (n ==1 || n == 2) {
      return 1
   }
   return fb(n-1) + fb(n-2)
}

console.time('fb执行时间1')
const result = fb(42)
console.timeEnd('fb执行时间1')
self.postMessage('worker1')
复制代码
// worker2.js 和 worker3.js 同理

执行时间非常接近,可以看出是同时执行多个任务。

console.time() 和 console.timeEnd

console.time()和console.timeEnd()是JavaScript中的控制台方法,可以用来测量代码的执行时间。

console.time()用于开始计时,它接受一个字符串作为参数,该字符串是一个标识符,用于标记计时器。

console.timeEnd()用于结束计时,它接受一个与之前开始计时时使用的标识符相同的字符串作为参数。

使用这两个方法的步骤如下:

  1. 在代码的起始位置,使用console.time()方法开始计时,传入一个标识符字符串,用于标记计时器。

  2. 在代码的结束位置,使用console.timeEnd()方法结束计时,传入与之前开始计时时使用的标识符相同的字符串作为参数。

  3. 在控制台中,会输出经过的时间(以毫秒为单位)。

console.time()和console.timeEnd()对于测试代码的性能和优化非常有用,可以帮助你找到代码中耗时的部分,并进行针对性的优化。

相关推荐
传人once21 分钟前
多图片上传预览功能如何写
前端·css·html·jquery·html5
Eric.4642 分钟前
Wan‑Animate+MiniMax-H3 本地部署 AI 漫剧流水线:8G 显存动作迁移与动态分镜工程实战
前端·人工智能·comfyui·ai漫剧
库拉镜像AI牛牛2 小时前
短剧内容自动化生产:知漫剧工作室落地教程
大数据·服务器·前端·人工智能·语音识别
律宏阔2 小时前
Flutter 列表图片内存优化:CachedNetworkImage 与 ClipRRect 的取舍
前端·flutter
行者全栈架构师2 小时前
【鸿蒙心迹】相册文搜图工程化落地:HarmonyOS 7.0 端侧 AI 检索全链路实战与 5 个踩坑解法
前端
律宏阔2 小时前
Dart 3 Record:解决 Future.wait 异构返回值的类型问题
前端·flutter
Seraphina363 小时前
DVWA(XSS Reflected/Stored High,CSRF Low)
前端·xss·csrf
默_笙4 小时前
🍔 中间件不只是打日志:四个钩子、一次短路,和自带的工具
前端·javascript
程序员老赵4 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
星禾元亨4 小时前
同一件事有三份资料,AI 该信哪一份?冲突判定、优先级链与处置流程
前端·人工智能