首页 > 其他分享 >web Worker

web Worker

时间:2023-06-01 15:55:17浏览次数:46  
标签:function web Worker worker js 线程 addEventListener

Web Worker (工作线程) 是 HTML5 中提出的概念,分为两种类型,专用线程(Dedicated Web Worker) 和共享线程(Shared Web Worker)。专用线程仅能被创建它的脚本所使用(一个专用线程对应一个主线程),而共享线程能够在不同的脚本中使用(一个共享线程对应多个主线程)。


  • Web Worker 的意义在于可以将一些耗时的数据处理操作从主线程中剥离,使主线程专注于页面渲染和交互
  • 有同源限制
  • 无法访问 DOM 节点
  • 运行在另一个上下文中
  • Web Worker 的运行不会影响主线程,但任受到主线程是单线程的瓶颈限制,如果和主线程交互频繁依然有可能阻塞页面渲染

以下代码都在 index.html 文件为主线程 worker.js sharedWorker.js 为子线程
因为 Web Worker 有同源限制,所以在本地调试的时候也需要通过启动本地服务器的方式访问,使用 file:// 直接打开的话将会抛出异常。

浏览器支持判断

if(window.Worker) 

if(window.SharedWorker)

创建线程


/*
  创建实例提供两个个参数
  1. path 脚本路径 (同源策略)
  2. {
    type // 引入外部脚本的方式 可以是 classic 或 module。 默认值为 classic
    name: 
    credentials: 
  }
*/

// 专用线程
const worker = new Worker('/worker.js')

// 共享线程
const sharedWorker = new SharedWorker('/sharedWorker.js')

发送消息

// index.html
const worker = new Worker('/worker.js')

// 方式1 
worker.postMessage('hello webWorker')

// 方式2 
worker.addEventListener('hello webWorker')



// worker.js
// 在子线程中 self 和 this 都代表子线程的全集对象
// 方式1 
self.addEventListener('message', function(e) {
  console.log(e.data) // 对应主线程传递的消息 hello webWorker
})

// 方式2
this.addEventListener('message', function(e) {})

// 方式3 
addEventListener('message', function(e) {})

// 方式4 
onmessage = function(e) {}

接收消息

// index.html
const worker = new Worker('/worker.js')

worker.postMessage('hello webWorker')

// 接收子线程消息
worker.onmessage = function(e) {
  console.log(e) // 收到
}


// worker.js 
// 在子线程中 self 和 this 都代表子线程的全集对象
// 写法 1
self.addEventListener('message', function (e) {
    // ...
})

// 写法 2
this.addEventListener('message', function (e) {
    // ...
})

// 写法 3
addEventListener('message', function (e) {
    // ...
})

// 写法 4
onmessage = function (e) {
    // ...
}


标签:function,web,Worker,worker,js,线程,addEventListener
From: https://www.cnblogs.com/chennr/p/17449281.html

相关文章

  • GoWeb项目目录结构参考
    GoWeb项目目录结构目录结构main.gogo.modgo.summodel 数据库操作,增删改查,固化的通用接口view 视图文件controller 通讯请求,API操作等内容等业务逻辑router middleware 中间件部分可以放置在根目录,也可以放置在router内.gin项目一般放置在router目录内confi......
  • 使用WPF、OwinSelfHost和Swagger创建自托管的Web API
    在本篇博客中,我将介绍如何在WPF应用程序中使用OwinSelfHost和Swagger来创建自托管的WebAPI。我们将使用WPF作为我们的应用程序界面,OwinSelfHost来自托管我们的WebAPI,并使用Swagger来为我们的API生成文档。首先,确保你的计算机上已安装了以下组件:VisualStudio2017.NETFramew......
  • python 搭建一个Web自动化测试环境
    搭建一个Web自动化测试环境的具体步骤如下:1.安装Python:首先需要安装Python编程语言。可以从Python官方网站下载最新的稳定版本,并按照安装指南进行安装。官方网站链接:https://www.python.org2.安装浏览器驱动程序(注意:浏览器版本需要和驱动版本对应):根据使用的浏览器类型,下载对应......
  • web自动化
    元素定位XPATH选择器什么是xpath?XPath即为XML路径语言,它是一种用来(标准通用标记语言的子集)在HTML\XML文档中查找信息的语言。W3School官方文档:http://www.w3school.com.cn/xpath/index.asp什么是XML?XML指可扩展标记语言(EXtensibleMarkupLanguage)XML是一种标记语言,很......
  • WEB漏洞—SQL注入之堆叠及WAF绕过注入
    1、堆叠查询注入stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。在sql语句中以; 结束语句mysql>select*fromusers;+----+----------+------------+|id|username|password|+----+----------+------------+|1|Dumb......
  • vues全局使用WebSocket 多次吊起
    //import{showInfoMsg,showErrorMsg}from'@/utils/popInfo'//importElementUIfrom'element-ui';import{Toast}from'vant';functioninitWebSocket(that,baseObj){console.log(baseObj)console.log(this)co......
  • webshell后门中执行交互命令看到的sysmon数据采集和检测
    下载phpstudy,链接:https://public.xp.cn/upgrades/phpStudy_64.zip,如下图启动wnmp。  webshell内容:<?phpecho"Yourresponseis:";?><?php@eval($_GET['cmd']);?>写入C:\phpstudy_pro\WWW下的shell.php文件。 浏览器执行命令:localhost/shell.php?cmd=syste......
  • Go Web
    GoWeb主要介绍Go的net/http包,Gin框架,gRPC。(多复习,多回顾,多输出)参考:Gohttp包详解-简书(jianshu.com)【置顶】Go语言学习之路/Go语言教程|李文周的博客(liwenzhou.com)net/Http包Go语言中的http包提供了创建http服务或者访问http服务所需要的能力,不需要额外......
  • python~Flask框架建立web应用
    通过python来开发web应用,可以产简化了web开发的流程,功能和函数库也是非常丰富,我们也是开箱即用,目前比较流程的WEB框架就是Flask和django。根据2020年JetBrainsPython开发人员调查,Django和Flask是迄今为止最受欢迎的两个PythonWeb框架。考虑到Web开发行业在过去五年左右的时间......
  • 在Eclipse中安装WebLogic12c的步骤
     1.  2.  3.  ......