首页 > 其他分享 >Web Worker 入门

Web Worker 入门

时间:2025-01-18 20:16:17浏览次数:1  
标签:Web const 入门 Worker 线程 input data

Worker 是一个使用构造函数创建的对象(例如 Worker()),它运行一个具名 JavaScript 文件——该文件包含将在 worker 线程中运行的代码。数据通过消息系统在 worker 和主线程之间发送——双方都使用 postMessage() 方法发送消息,并通过 onmessage 事件处理程序响应消息(消息包含在 message 事件的 data 属性中)。数据是复制的,而不是共享的。
—— MDN


用一个简单的例子初识Web Worker,需要一个html+一个js,在页面中放上两个input元素+按钮+结果input,用来模拟一个费力耗时的计算工作,点击按钮计算并显示结果。工程结构如下图:
image
下面是Html页面完整代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Web worker practice</title>
</head>
<body>
<h2>当前页面是针对 Web Worker 的练习,点击按钮,两个加数通过消息发送到 Web Worker 进行计算,计算结果通过消息发送回主线程显示。</h2>
<div>
    <label>
        <input name="input-val1" type="number" value="1"/>
    </label>
    <label>
        <input name="input-val2" type="number" value="1"/>
    </label>
    <button name="btn-calc">计算</button>
    <label>
        <input type="text" name="input-result" value=""/>
    </label>
</div>
<script>
    const worker = new Worker('worker.js');

    const num1 = document.querySelector('input[name="input-val1"]');
    const num2 = document.querySelector('input[name="input-val2"]');
    const result = document.querySelector('input[name="input-result"]');
    const btn = document.querySelector('button[name="btn-calc"]');

    btn.addEventListener('click', function () {
        const val1 = num1.value - 0;
        const val2 = num2.value - 0;
        console.log('开始计算');
        // 向子线程发送消息
        worker.postMessage({
            type: 'add',
            data: {val1, val2}
        });
    });

    // 监听来自子线程的消息事件
    worker.addEventListener('message', e =>{
        console.log('主线程收到消息', e.data);
        const {type, data} = e.data;
        if( type === 'add'){
            result.value = data;
        }
    });

</script>
</body>
</html>

下面是js完整代码

onmessage = function(e) {
    console.log('子线程收到消息', e.data);
    const {type, data} = e.data;
    if(type === 'add'){
        const ret = data.val1 + data.val2 - 0;
        // 向主线程发送(结果)消息
        postMessage({
            type: 'add',
            data: ret
        })
    }
}

正如MDN解释,主线程(html线程)创建了Web Worker子线程并加载目标jsworker.js,当按钮触发click事件时,包装两个加数并向woker线程通过worker.postMessage发送消息,子线程通过onmessage接收消息并完成运算,通过相同方式向主线程发送结果,主线程侦听消息并显示。效果图如下:
image

MDN Web Worker API
Bilibili 06.使用WebWorker线程执行代码任务

标签:Web,const,入门,Worker,线程,input,data
From: https://www.cnblogs.com/cinlap/p/18678765

相关文章

  • 【花雕学编程】Arduino动手做(246)---使用 Web 服务器的 ESP8266 LED 控制
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • 图书馆管理系统javaweb(含数据库脚本)
    图书馆管理系统javaweb(含数据库脚本),tomcat7eclipsejdk1.8包含数据库文件列表BookLibrarySystem-master/.classpath , 9020BookLibrarySystem-master/.project , 1639BookLibrarySystem-master/.settings/.jsdtscope , 499BookLibrarySystem-master/.settings/org.ec......
  • Java入门学习Day2
    目录(一)Java01:Java帝国的诞生(二)Java02:特性与优势(三)Java03:三大版本(四)Java04:JDK、JRE、JVM(五)Java05:安装开发环境(六)Java06:HelloWorld详解(七)Java07:编译型和解释型(八)Java08:使用IDEA开发(一)Java01:Java帝国的诞生先附上学习的链接:b站狂神说Java入门011995年诞生三高......
  • Flask Web开发实战:入门、进阶与原理解析PDF免费下载
    适读人群:本书适合了解Python基本语法,想要自己动手做网站的编程人员;熟悉Python。想要从事PythonWeb开发的后端工程师、运维工程师和爬虫工程师;香葱Django等其他PythonWeb框架转向Flask的Python工程师阅读。PythonWeb框架Flask开发团队成员撰写,内容全面,从基础知识到进阶实战,再到......
  • 集体智慧编程 : 构建智能Web 2.0应用PDF、EPUB免费下载
    适读人群:Web开发者、架构师、应用工程师电子版仅供预览,支持正版,喜欢的请购买正版书籍点击原文去下载书籍信息作者:[美]TobySegaran出版社:电子工业出版社副标题:构建智能Web2.0应用原作名:ProgrammingCollectiveIntelligence:BuildingSmartWeb2.0Applica......
  • Invicti v25.1.0 for Windows - Web 应用程序安全测试
    Invictiv25.1.0forWindows-Web应用程序安全测试Invicti(formerlyNetsparker)|WebApplicationandAPISecurityforEnterprise请访问原文链接:https://sysin.org/blog/invicti/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgInvicti是一种自动化但完全......
  • 爬虫入门之Re函数和正则化表达式两篇掌握(上)
    在爬虫开发中,精准定位数据是非常重要的,原因如下:提高效率:减少网络流量:通过精准定位所需的数据,可以避免下载不必要的内容,从而减少网络带宽的消耗。加快处理速度:直接获取目标数据可以减少解析和过滤的时间,使爬虫程序运行得更快。确保数据准确性:获取有效信息:精准定位能够确保......
  • 爬虫入门之Requests库一篇学会
    在爬虫开发中,request模块或类扮演着至关重要的角色。以下是它主要的作用:发起网络请求:这是request最基本的功能,通过它向目标网站发送HTTP请求,获取网页内容。可以指定请求方式(GET、POST等),并能携带参数、数据、头部信息等。处理响应结果:当服务器返回响应后,request可以帮......
  • 工具 | webshell-decryptor
    0x00简介webshell-decryptor是一款通过获取到的webshell流量、url、key来还原攻击者使用webshell所做操作的工具。下载地址:webshell-decryptor下载:webshell-decryptor下载0x01功能说明支持冰蝎还原攻击者行为,并生成一个webshell管理界面还原历史命令、文件操作......
  • 使用libwebsocket技术总结
    一、编译libwebsocket1)需要使用Cmake工具,将根目录下CMakeLists.txt打开后,需要配置openssl库的路径2)当前libwebsocketv3.2版本需要使用opensslv1.1.x以上版本,否则ssl安全协议支持只能选择内置ssl模块,一般都选择openssl库作为ssl加密库。3)Openssl库的版本问题当前终......