JavaScript Web Worker用法指南

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

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》

JavaScript Web Worker用法指南,JavaScript保姆级教程,前端,javascript,开发语言​ 

JavaScript Web Worker用法指南,JavaScript保姆级教程,前端,javascript,开发语言

✨ 前言

        Web Worker可以将耗时任务放到后台执行,避免阻塞UI。本文将详细介绍Web Worker的用法,让你可以提升web应用性能。

通过本文你将学习:

  • Web Worker的工作原理
  • 不同类型worker的区别
  • worker的创建和通信用法
  • worker间的数据传递方法
  • worker的调试技巧
  • worker可以提升应用性能的场景
  • 弥补worker在老浏览器不兼容的方法

准备让Web Worker成为你的网页优化利器了吗?让我们开始吧!

JavaScript Web Worker用法指南,JavaScript保姆级教程,前端,javascript,开发语言

第一节:Web Worker简介

Web Worker可以将JS代码运行在后台线程,实现多线程:

  • 不阻塞主UI线程,提升互动性
  • 与主线程同时运行,实现并行
  • 通过消息传递与主线程通信

DEDICATED WORKER:专属于一个页面 SHARED WORKER:可被多个页面共享

第二节:创建Worker

创建一个Dedicated Worker的基本步骤是:

  1. 主线程中用new Worker()实例化一个Worker对象,并传入脚本的路径
  2. 在指定的js脚本中使用self对象对worker进行编程
  3. self对象表示worker的全局作用域,可以添加事件监听器
  4. 常见的事件有onmessage、onerror等

一个典型的示例:

// 主线程
const worker = new Worker('work.js');

worker.postMessage('start');

// work.js
self.addEventListener('message', e => {
  console.log('worker recv:', e.data);
  self.postMessage('hello from worker');
});

Worker线程中不能直接访问DOM,但可以通过postMessage()与主线程通信。

创建一个Shared Worker步骤类似,只是用SharedWorker实例,并可以指定worker的名称。

Shared Worker可以被多个窗口访问,从而共享同一个逻辑。

Dedicated Worker专属于一个页面文档。根据实际需求选择合适的Worker类型。

创建shared worker:

// 主线程
const worker = new SharedWorker('work.js');

// work.js 
self.addEventListener('connect', (e) => {
  // 收到连接
});

第三节:worker间通信

主线程 -> worker:

worker.postMessage('hello');

worker -> 主线程:

self.postMessage('hi from worker');

 

  1. 主线程到worker的通信

主线程使用worker对象的postMessage()方法向worker发送消息:

// 主线程 
worker.postMessage('start');

 postMessage()可以发送各种数据类型,包括原始类型、对象、数组等。

  1. worker到主线程的通信

worker中使用self.postMessage()发送:

// worker内
self.postMessage('message from worker');

 self代表worker的全局作用域。

  1. 接收消息

主线程通过worker.onmessage监听消息:

// 主线程
worker.onmessage = function(e) {
  console.log(e.data);
}

worker中通过self.onmessage监听:

// worker内 
self.onmessage = function(e) {
  console.log(e.data);
}

e.data是消息内容。

  1. 传递数据注意事项
  • 对象会串行化,记得调用JSON.parse()
  • 传递函数需要把函数字符串化

这些是worker间通信的主要方式,可以传递不同类型的数据,充分利用多线程带来的好处。

第五节:Worker中的异步请求

Worker线程可以发出AJAX请求,使用与主线程相同的XMLHttpRequest对象:

// Worker内
const xhr = new XMLHttpRequest();
xhr.open('GET', '/data');
xhr.onload = () => {
  self.postMessage(xhr.response); 
}
xhr.send();

这样可以在Worker中完成异步数据加载,不影响主UI线程。

第六节:调试Worker

主线程可以通过inspect()调试运行中的Worker:

const worker = new Worker();
worker.inspect();

 

这会打开DevTools来调试worker线程。

也可以将console日志发送到主线程:

// Worker内
self.postMessage(console.log.apply(console, arguments));

第七节:使用场景

Worker常用于:

  • 超大数据排序、搜索、处理
  • 数据转换与编译,如Json、Excel
  • 高延迟任务或高计算工作,如机器学习

第八节:兼容性和代替方案

低版本浏览器可能不支持Worker,可以使用polyfill或只在新浏览器使用。

也可以使用setTimeout模拟后台线程。

✨ 结语     

        在这篇文章中,我们全面介绍了Web Worker的用法 - 它可以将JavaScript代码运行在后台线程,实现多线程计算。

        首先,我们看到Web Worker的优点,它不会阻塞主UI线程,可以实现并行执行任务。然后,我们介绍了Dedicated Worker和Shared Worker的区别,以及创建和终止Worker的方法。

        接下来,我们重点讲解了Worker之间的消息通信机制,这是利用多线程的关键。我们也讨论了Worker中发起异步请求和调试技巧。

        最后,给出了Web Worker的实际应用场景,以及需要注意的兼容性问题。

        我尽量用通俗的语言和示例给出了全面的讲解,希望这篇文章可以帮助大家正确使用Web Worker来优化web应用性能。如果还有任何问题,欢迎在评论交流!

JavaScript Web Worker用法指南,JavaScript保姆级教程,前端,javascript,开发语言文章来源地址https://www.toymoban.com/news/detail-802822.html

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

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

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

相关文章

  • web前端Javascript—7道关于前端的面试题

    本文主要是web前端Javascript—的面试题,附上相关问题以及解决答案,希望对大家web前端Javascript闭包的学习有所帮助。 每个JavaScript 程序员都必须知道闭包是什么。在 JavaScript 面试中,你很可能会被问到的问题 以下是 7 个有关 JavaScript的面试题,比较有挑战性。不要查看答案

    2024年02月03日
    浏览(95)
  • web前端javaScript笔记——(11)DOM

    属性                                     此事件发生在何时 onabort 图像的加载被中断。 onblur                                   元素失去焦点。 anchange                                 域的内容被改变 onclick  当用户点击某

    2024年01月19日
    浏览(57)
  • web前端javascript笔记——(13)事件(1)

    鼠标/键盘属性 altKey               返回当事件被触发时,“ALT”是否被按下。 button               返回当事件被触发时,哪个鼠标按钮被点击 clientX               返回当事件被触发时,鼠标指针的水平坐标。 clientY               返回当事件被触

    2024年01月25日
    浏览(50)
  • 【Javascript保姆级教程】if判断语句的三种形式

    嗨,欢迎来到Javascript保姆级教程!在编写代码时,我们经常需要根据不同的情况来做出不同的决策和操作。这时候,就需要用到条件判断语句。今天,我们将学习Javascript中的三种主要条件判断语句:if、if…else和if…else if…。让我们一起来详细了解它们吧! 首先,我们来介

    2024年04月22日
    浏览(35)
  • 【JavaScript保姆级教程】for循环与for循环遍历数组

    JavaScript是一门强大的编程语言,它允许开发者有效地控制程序的流程。在JavaScript中,有多种循环结构可供选择,其中for循环是最常用的之一。本教程将深入探讨for循环的基本概念,提供示例代码,并展示如何使用for循环来遍历数组。同时,我们还将介绍如何在for循环中嵌套

    2024年02月06日
    浏览(48)
  • JavaScript保姆级教程 ——— 重难点详细解析(万字长文,建议收藏)

    本文是整理了JS中的一些 重点,难点,以及不好理解的知识点 本文非常详细 ,深入的讲解, 包学包会 1.1 函数(Function)是什么? 函数(方法)是由事件驱动的或者当它被调用时执行的可重复使用的代码块 —— 官方说明 向来觉得官方的文档是有些生硬的,举个例子: 函数可

    2023年04月08日
    浏览(49)
  • 2023年web前端开发之JavaScript进阶(一)

    接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习 作用域 、变量提升、 闭包 等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法, 降低代码的冗余度 。 理解作用域对程序

    2024年02月03日
    浏览(53)
  • web前端框架JS学习之JavaScript类型转换

    vascript有多种数据类型,如字符串、数字、布尔等,可以通过typeof语句来查看变量的数据类型。数据类型转换就是数据类型之间相互转换,比如把数字转成字符串、把布尔值转成字符串、把字符串转成数字等,这在工作也是经常碰到的。 本期我们就给大家说说web前端框架JS学

    2024年02月10日
    浏览(59)
  • Web Worker的概念、用法、使用场景

    ​ 目录 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. 总结 Web Worker  使得在一个独立于 Web 应用程序主执行线程的后台线程中运行脚本操作成为可

    2024年02月08日
    浏览(27)
  • 19个Web前端交互式3D JavaScript框架和库

    JavaScript (JS) 是一种轻量级的解释(或即时编译)编程语言,是世界上最流行的编程语言。JavaScript 是一种基于原型的多范式、单线程的动态语言,支持面向对象、命令式和声明式(例如函数式编程)风格。JavaScript 几乎可以做任何事情,更可以在包括物联网在内的多个平台

    2024年02月22日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包