web worker的基本使用案例

news2024/11/27 17:48:37
  1. 文件目录如下

在这里插入图片描述

  1. 代码按照顺序分别如下

    • webworker.html

      <!DOCTYPE html>
      <html lang="en">
        <head>
          <meta charset="utf-8" />
          <meta http-equiv="X-UA-Compatible" content="IE=edge" />
          <meta name="viewport" content="width=device-width" />
      
          <title>Web Workers basic example</title>
          <link rel="stylesheet" href="./css/style.css" />
        </head>
      
        <body>
          <h1>Web<br />Workers<br />basic<br />example</h1>
      
          <div class="controls" tabindex="0">
            <form>
              <div>
                <label for="number1">上传: </label>
                <input type="file" id="file-upload" />
              </div>
              <div>
                <label for="number1">数字1: </label>
                <input type="text" id="number1" value="0" />
              </div>
              <div>
                <label for="number2">数字2: </label>
                <input type="text" id="number2" value="0" />
              </div>
      
              <div>
                <button type="button">计算hash</button>
              </div>
            </form>
      
            <p class="result">结果: 0</p>
          </div>
          <script src="./js/main.js"></script>
        </body>
      </html>
      
      
    • style.css

      html {
        background-color: #7d2663;
        font-family: sans-serif;
      }
      
      h1 {
        margin: 0;
        font-size: 20vmin;
        letter-spacing: -0.2rem;
        position: absolute;
        top: 0;
        z-index: -1;
      }
      
      p {
        margin: 0;
      }
      
      .controls {
        padding: 4vw;
        width: 75%;
        margin: 10vw auto;
        background-color: rgba(255, 255, 255, 0.7);
        border: 5px solid black;
        opacity: 1;
        transition: 1s all;
      }
      
      .controls:hover,
      .controls:focus {
        opacity: 1;
      }
      
      .controls label,
      .controls p,
      .controls input {
        font-size: 3vw;
      }
      
      .controls div {
        padding-bottom: 1rem;
      }
      
      
    • main.js

      const first = document.querySelector('#number1');
      const second = document.querySelector('#number2');
      const fileUplaod = document.querySelector('#file-upload');
      
      const result = document.querySelector('.result');
      const CHUNKS_SIZE = 1 * 1024 * 1024;
      
      if (window.Worker) {
        const myWorker = new Worker('./js/webworker.js', { name: 1 });
      
        // 文件分片
        const filefragment = (file, size = CHUNKS_SIZE) => {
          let curr = 0;
          const chunks = [];
          while (curr < file.size) {
            chunks.push({ index: curr, file: file.slice(curr, curr + size) });
            curr += size;
          }
          return chunks;
        };
      
        // 计算hash
        const calcHash = (chunks) => {
          return new Promise((resolve, reject) => {
            myWorker.postMessage({ chunks });
            myWorker.onmessage = (e) => {
              const { hash } = e.data;
              if (hash) {
                resolve(hash);
              } else {
                reject();
              }
            };
          });
        };
      
        first.onchange = function () {
          myWorker.postMessage([first.value, second.value]);
          console.log('数字1发生了变化');
        };
      
        second.onchange = function () {
          myWorker.postMessage([first.value, second.value]);
          console.log('数字2发生了变化');
        };
      
        fileUplaod.onchange = async function (e) {
          const file = e.target.files[0];
          if (!file) return;
          const chunks = filefragment(file);
          const hash = await calcHash(chunks);
          console.log(hash);
        };
      
        myWorker.onmessage = function (e) {
          result.textContent = e.data;
          console.log('接收返回结果');
        };
      } else {
        console.log('您的浏览器不支持webworker');
      }
      
      
    • spak-md5.js由于代码太长,这边提供下载链接

      // https://www.bootcdn.cn/spark-md5/
      
    • webworker.js

      self.importScripts('./spark-md5.js');
      
      self.onmessage = function (e) {
        const { chunks } = e.data;
        const spark = new self.SparkMD5.ArrayBuffer();
      
        let count = 0;
      
        const loadNext = (index) => {
          const reader = new FileReader();
          reader.readAsArrayBuffer(chunks[index].file);
          reader.onload = (e) => {
            count++;
            spark.append(e.target.result);
            if (count == chunks.length) {
              self.postMessage({
                hash: spark.end(),
              });
            } else {
              loadNext(count);
            }
          };
        };
        loadNext(0);
      };
      
      
  2. 大致的使用方法如上,如果想更详细的了解的话,请转至MDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/402573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()

C语言函数&#xff1a; 字符串函数及模拟实现strtok()、strstr()、strerror() strstr()函数: 作用&#xff1a;字符串查找。在一串字符串中&#xff0c;查找另一串字符串是否存在。 形参: str2在str1中寻找。返回值是char*的指针 原理&#xff1a;如果在str1中找到了str2&…

为什么这几年参加PMP考试的人越来越多?

PMP认证从国外引进大陆这么多年了&#xff0c;其火热程度依然不减&#xff0c;我个人认为是取决于市场的运作和“游戏规则”&#xff08;岗位招聘和项目招标需要&#xff09;。PMP含金量不算高&#xff0c;更多的是“敲门砖”作用&#xff0c;项目管理岗位的门槛&#xff0c;当…

MySQL日志审计和分析

审核数据库活动是加强数据库安全性的重要组成部分。这涉及识别漏洞&#xff0c;例如默认或弱登录凭据、过多的用户和组权限以及未修补的数据库。攻击者利用这些漏洞来实现自己的目标&#xff0c;如权限提升、SQL 注入和 DoS 攻击。因此&#xff0c;出于安全性和合规性原因&…

源码分析spring如和对@Component注解进行BeanDefinition注册的

Spring ioc主要职责为依赖进行处理&#xff08;依赖注入、依赖查找&#xff09;、容器以及托管的(java bean、资源配置、事件)资源声明周期管理&#xff1b;在ioc容器启动对元信息进行读取&#xff08;比如xml bean注解等&#xff09;、事件管理、国际化等处理&#xff1b;首先…

SPI读写SD卡速度有多快?

SD卡是一个嵌入式中非常常用的外设&#xff0c;可以用于存储一些大容量的数据。但用单片机读写SD卡速度一般都有限&#xff08;对于高速SD卡&#xff0c;主要是受限于单片机本身的接口速度&#xff09;&#xff0c;在高速、实时数据存储时可能会有影响。但具体速度可以达到多少…

Spark RDD的设计与运行原理

一、Spark RDD概念 一个RDD就是一个分布式对象集合&#xff0c;本质上是一个只读的分区记录集合&#xff0c;每个RDD可以分成多个分区&#xff0c;每个分区就是一个数据集片段&#xff0c;并且一个RDD的不同分区可以被保存到集群中不同的节点上&#xff0c;从而可以在集群中的…

Could not resolve dependencies for project

maven 打包Could not resolve dependencies for project和无效的目标发行版: 1.8 1.maven 打包Could not resolve dependencies for project 最近项目上使用的是idea ide的多模块话&#xff0c;需要模块之间的依赖&#xff0c;比如说系统管理模块依赖授权模块进行认证和授权&a…

聊聊关于分类和分割的损失函数:nn.CrossEntropyLoss()

目录 1. nn.CrossEntropyLoss() 2. 多分类中 nn.CrossEntropyLoss() 的应用 3. 分割中 nn.CrossEntropyLoss() 的应用 3.1 测试文件 3.2 输出可视化 3.3 softmax 3.4 log 3.5 CrossEntropyLoss 1. nn.CrossEntropyLoss() 分类中&#xff0c;经常用 nn.CrossEntropyL…

.NET Core Api使用Folder(文件夹)形式发布并指定监听端口

分为以下几个步骤 1. 先安装SDK及运行环境, 无需安装IIS, 因为他不在IIS上运行 环境下载路径, 我用的是.NET 7.0, 可以根据自己的版本下载: 下载 .NET 7.0 SDK (v7.0.201) - Windows x64 Installer 下载.NET运行环境 下载后安装.直接下一步..安装即可 2. 配置发布设置 (…

Nginx服务优化与防盗链

目录 1.隐藏nginx版本号 1.查看版本号 2.隐藏版本信息 2.修改用户与组 3.缓存时间 4.日志分割 5.连接超时 6.更改进程数 7.网页压缩 8.配置防盗链 1.配置web源主机&#xff08;192.168.156.10 www.lhf.com&#xff09; 2.配置域名映射关系 3.配置盗链主机 &#xff0…

python实现波士顿房价预测---(2)

计算梯度 继续上一篇的内容python实现波士顿房价预测—(1)。 梯度计算公式中引入计算因子12\frac{1}{2}21​&#xff0c;为了计算更加简洁。 L12N∑i1N(yi−zi)2L\frac{1}{2N}\sum_{i1}^{N}(y_i - z_i)^2L2N1​∑i1N​(yi​−zi​)2 其中ziz_izi​是模型对于第i个样本的预测值…

【halcon】轮廓拟合相关函数

涉及函数 edges_sub_pix 寻找边缘 edges_sub_pix (Image, Edges, canny, 1, 10, 20) 后面三个参数&#xff0c;越小&#xff0c;找到的细节越多。这个是对应录波器为canny时。 canny滤波器用的最多。 segment_contours_xld 将连续的轮廓进行分段&#xff0c;按圆弧或者执…

软件测试13

Linux命令 1.pwd&#xff1a;查看当前所在的路径位置 2.ls&#xff1a;查看当前路径下有哪些文件 3.cd&#xff1a;切换路径 4.touch&#xff1a;创建普通文件&#xff0c;可以创建单文件&#xff0c;也可以创建多文件&#xff08;touch a&#xff0c;touch b c&#xff09; 5…

【专项训练】高级搜索

高级搜索,这部分非常烧脑,可略过! 包括:剪枝、双向BFS、启发式搜索! 启发式搜索:优先队列,即优先级搜索! 回溯:分治 + 试错 数独问题,类似八皇后! 36. 有效的数独 https://leetcode.cn/problems/valid-sudoku/description/ class Solution(object

Java【二叉搜索树和哈希表】模拟实现 + 【Map和Set】介绍

文章目录前言一、二叉搜索树1、什么是二叉搜索树2、模拟实现二叉搜索树2.1, 查找2.2, 插入2.3, 删除3、性能分析二、模型三、哈希表1、什么是哈希表1.1, 什么是哈希冲突1.2, 避免, 解决哈希冲突1.2.1, 避免: 调节负载因子1.2.2, 解决1: 闭散列(了解)1.2.3, 解决2: 开散列/哈希桶…

基于卷积神经网络CNN的水果分类预测,卷积神经网络水果等级识别

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 卷积神经网络CNN水果分类预测 基本结构 主要参数 MATALB代码 结果图 展望 背影 现在生活&#xff0c;为节能减排&#xff0c;减少电能…

推荐系统 FM因式分解

reference&#xff1a;知乎 FM算法解析 LR算法没有二阶交叉 如果是id类特征&#xff0c;这里的x是0/1&#xff0c;raw的特征输入就是float&#xff0c;当然&#xff0c;在我的理解里&#xff0c;一般会把raw的特征进行分桶&#xff0c;还是映射到0/1特征&#xff0c;不然这个w…

树莓派测试wifi与eth速率

测试网速方法&#xff1a; 1.安装插件&#xff1a; 首先在树莓派端安装iperf3 sudo apt install iperf3PC端也需要安装iperf3&#xff0c;单击下面网址即可 下载网址 压缩包解压到桌面&#xff0c;文件内容如下图所示&#xff1a; 2.开始测速服务&#xff1a; 树莓派端在…

周报终结者 GitLab 个人工作记录查询器

序言 每周都要写周报&#xff0c;烦死人。为了解救自己&#xff0c;把自己从无聊的工作中抽离出来。 特别写了一个工具。可以查询GitLab中自己一段时间内的所有提交记录。 按照项目和分支进行排序 效果 还可以查询原始的json数据方便自己进行筛选和扩展 使用方式 1.获取个人…

从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞

本文介绍了 Prometheus 插件造成长尾请求现象的原因&#xff0c;以及如何解决这个问题。 作者屠正松&#xff0c;Apache APISIX PMC Member。 原文链接 现象 在 APISIX 社区中&#xff0c;曾有部分用户陆续反馈一种神秘现象&#xff1a;部分请求延迟较长。具体表现为&#xf…