Web Workers API - Web API 接口参考 | MDN
https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API
通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。
Web Workers 概念与用法
使用构造函数(例如,Worker()
)创建一个 worker 对象, 构造函数接受一个 JavaScript文件URL — 这个文件包含了将在 worker 线程中运行的代码。worker 将运行在与当前 window
不同的另一个全局上下文中,这个上下文由一个对象表示,标准情况下为DedicatedWorkerGlobalScope
(标准 workers 由单个脚本使用; 共享workers使用SharedWorkerGlobalScope
)。
你可以在worker 线程中运行任意的代码,但注意存在一些例外:直接在 worker 线程中操纵 DOM 元素;或使用window
对象中的某些方法和属性。大部分 window 对象的方法和属性是可以使用的,包括 WebSockets,以及诸如 IndexedDB 和 FireFox OS 中独有的 Data Store API 这一类数据存储机制。更多信息请参见: Functions and classes available to workers 。
主线程和 worker 线程相互之间使用 postMessage()
方法来发送信息, 并且通过 onmessage
这个 event handler来接收信息(传递的信息包含在 Message
这个事件的data
属性内) 。数据的交互方式为传递副本,而不是直接共享数据。
worker 可以另外生成新的 worker,这些 worker 与它们父页面的宿主相同。 此外,worker 可以通过 XMLHttpRequest
来访问网络,只不过 XMLHttpRequest
的 responseXML
和 channel
这两个属性的值将总是 null 。
除了专用 worker 之外,还有一些其他种类的 worker :
- Shared Workers 可被不同的窗体的多个脚本运行,例如IFrames等,只要这些workers处于同一主域。共享worker 比专用 worker 稍微复杂一点 — 脚本必须通过活动端口进行通讯。详情请见
SharedWorker
。 - Service Workers 一般作为web应用程序、浏览器和网络(如果可用)之间的代理服务。他们旨在(除开其他方面)创建有效的离线体验,拦截网络请求,以及根据网络是否可用采取合适的行动,更新驻留在服务器上的资源。他们还将允许访问推送通知和后台同步API。
- Chrome Workers 是一种仅适用于firefox的worker。如果您正在开发附加组件,希望在扩展程序中使用worker且可以访问 js-ctypes,那么可以使用Chrome Workers。详情请见
ChromeWorker
- 音频Workers可以在网络worker上下文中直接完成脚本化音频处理.
注意: 根据网络worker规范, worker错误事件不应该冒泡(参见bug 1188141)。该规范已在Firefox 42中实现。
Web Worker 接口
AbstractWorker
- 抽象属性和方法是所有类型的worker中常用的(例如
Worker
或SharedWorker
) Worker
- 表示正在运行的worker线程,允许你将信息传递到正在运行的worker程序代码。
SharedWorker
- 表示一种可以同时被多个浏览器环境访问的特殊类型的worker。这些浏览器环境可以是多个window, iframes 或者甚至是多个worker.
WorkerGlobalScope
- 表示任意worker的通用作用域(对于正常的网页类容来说与
Window
有相同的作用)。不同类型的worker都有从接口继承作用于对象,并且可以添加更多特定功能。 DedicatedWorkerGlobalScope
- 表示一个专用worker的作用域, 继承自
WorkerGlobalScope
,且可添加一些特有的功能。 SharedWorkerGlobalScope
- 表示一个共享worker的作用域, 继承自
WorkerGlobalScope
, 且可添加一些特有的功能。 WorkerNavigator
- 表示用户代理(客户端)的身份和状态。
示例
我们创建了几个简单的demos以演示基本用法:
你可以在使用web workers中找到有关这些demos是如何工作的更多信息。
规范
规范 | 状态 | 评论 |
---|---|---|
HTML Living Standard | Living Standard | No change from Unknown. |
通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。的更多相关文章
-
HTML5 Web Workers来加速您的移动Web应用
一直以来,Web 应用程序被局限在一个单线程世界中.这的确限制了开发人员在他们的代码中的作为,因为任何太复杂的东西都存在冻结应用程序 UI 的风险.通过将多线程引入 Web 应用程… 在本文中,您将使 ...
-
JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景
摘要: 理解Web Workers. 原文:JavaScript是如何工作的:Web Workers的构建块 + 5个使用他们的场景 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这 ...
-
Webpack 下使用 web workers 及 基本原理 和 应用场景
_ 阅读目录 一:web workers的基本原理 二:web Workers 的基本用法 三:在webpack中配置 Web Workers 四:Web Worker的应用场景 回到顶部 一:web ...
-
简单了解Web Workers API
1. 为什么使用Web Workers API 通过使用该API,web应用程序可以独立于主线程,运行一个单独的线程来处理脚本. 可以在独立的线程中解决耗时较长的任务,避免主线程阻塞. 2. 应用 1 ...
-
[翻译]Review——How JavaScript works:The building blocks of Web Workers
原文地址:https://blog.sessionstack.com/how-javascript-works-the-building-blocks-of-web-workers-5-cases-w ...
-
在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
-
HTML5: HTML5 Web Workers
ylbtech-HTML5: HTML5 Web Workers 1.返回顶部 1. HTML5 Web Workers web worker 是运行在后台的 JavaScript,不会影响页面的性能 ...
-
HTML5(八)Web Workers
HTML 5 Web Workers web worker 是运行在后台的 JavaScript,不会影响页面的性能. 什么是 Web Worker? 当在 HTML 页面中执行脚本时,页面的状态是不 ...
-
docker中运行ASP.NET Core Web API
在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...
随机推荐
-
nodejs 相关
1.错误 fs.js:543 return binding.rename(pathModule._makeLong(oldPath), 上传图片->图片改名->保存->在页面显示该图 ...
-
英文 数字 不换行 撑破div容器
我们在div等容器 中,如果规定了宽度,并且里面的内容不是全英文或者全数字是OK的,会自动换行,但是如果是全数字或者是全英文,则会撑破容器,如图 解决方法 word-wrap:break-wo ...
-
HW6.28
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
-
linux命令find应用
基本语法: find path -option [-print ] [-exec -ok command ] {} \; find命令的参数: pathname: find ...
-
hdu4738(双连通分量)
传送门:Caocao's Bridges 题意:n个岛,曹操在一些岛之间建了一些桥,每个桥上有一些士兵把守,周瑜只有一个炸弹只能炸掉一个桥,并能使一些岛被孤立出来,炸弹需要士兵带过去,士兵的数量不能小 ...
-
php 通过curl获取远程数据,返回的是一个数组型的字符串,高手帮忙如何将这个数组类型的字符串变成数组。
如 Array([0] => Array([0] => Array([kd_status] => 已签收[kd_time] => 2014-04-30 18:59:43 [b] ...
-
【一天一道LeetCode】#45. Jump Game II
一天一道LeetCode系列 (一)题目 Given an array of non-negative integers, you are initially positioned at the fi ...
-
循环神经网络(RNN)--学习笔记
一.基本概念 RNN针对的数据是时序数据.RNN它解决了前馈神经网络,无法体现数据时序关系的缺点.在RNN网络中,不仅同一个隐含层的节点可以相互连接,同时隐含层的输入不仅来源于输入层的输入还包括了上一 ...
-
SmartSql 更新日志
SmartSql 更新历史记录 3.7.0 support cross SqlMap reference for #30 modifying Statement.Ref for delay depen ...
-
Android Handler 异步调用修改界面与主线程
在Android编程的过程中,如果在Activity中某个操作会运行比较长的时间,比如:下载文件.这个时候如果在主线程中直接下载文件,会造成Activity卡死的现象:而且如果时间超过5秒,会有ANR ...