Web Worker 在独立线程中运行。因此,它们执行的代码需要保存在一个单独的文件中。但在保存代码前,我们要先在您的主网页上创建新的 Worker 对象。构造函数采用 Worker 脚本的名称:
var worker = new Worker('task.js');
如果指定的异步下载文件存在,浏览器就会生成新的 Worker 线程。在完全下载并执行文件之前,系统不会生成 Worker。如果指向您 Worker 的路径返回 404,Worker 就会在不显示任何提示的情况下失败。
创建 Worker 之后,通过调用 postMessage() 方法启动:
worker.postMessage(); // Start the worker.
通过消息传递与 WORKER 通信
Worker 与其父网页之间的通信是通过事件模型和 postMessage() 方法实现的。postMessage() 可以接受字符串或 JSON 对象作为单个参数,具体取决于您的浏览器/版本。新式浏览器的最新版支持传递 JSON 对象。
以下示例使用字符串将“Hello World”传递给了 doWork.js 中的 Worker。Worker 直接返回了传递给它的消息。
主脚本:
var worker = new Worker('doWork.js');
worker.addEventListener('message', function(e) {
console.log('Worker said: ', e.data);
}, false);
worker.postMessage('Hello World'); // Send data to our worker.
doWork.js (Worker):
self.addEventListener('message', function(e) {
self.postMessage(e.data);
}, false);
在主网页中调用 postMessage() 时,我们的 Worker 通过定义 message 事件的 onmessage 处理程序来处理消息。您可以在 Event.data 中访问消息有效负载(此示例中为“Hello World”)。虽然这个特殊的示例并不精彩,但它说明 postMessage() 也是您将数据传回主线程的一种方法。很方便!
在主网页和 Worker 之间传递的消息是复制而不是共享的。
实际发生的情况是,系统将对象传递给 Worker 后,会将其序列化,随后在另一端解取消序列化。由于网页和 Worker 并不共享同一实例,因此每次传递时都要进行复制。大部分浏览器通过在任一端上对值进行自动 JSON 编码/解码来实施此功能。
请注意:停止 Worker 的方法有两种:
在主网页中调用 worker terminate(),或在 Worker 本身内部调用 self.close()。
适用于 WORKER 的功能
由于 Web Worker 的多线程行为,所以它们只能使用 JavaScript 功能的子集:
navigator 对象
location 对象(只读)
XMLHttpRequest
setTimeout()/clearTimeout() 和 setInterval()/clearInterval()
应用缓存
使用 importScripts() 方法导入外部脚本
生成其他 Web Worker
Worker 无法使用:
DOM(非线程安全)
window 对象
document 对象
parent 对象
加载外部脚本
您可以通过 importScripts() 函数将外部脚本文件或库加载到 Worker 中。该方法采用零个或多个字符串表示要导入的资源的文件名。
此示例将 script1.js 和 script2.js 加载到了 Worker 中:
worker.js:
importScripts('script1.js');
importScripts('script2.js');
也可以写成单个导入语句:
importScripts('script1.js', 'script2.js');
see:
http://www.html5rocks.com/zh/tutorials/workers/basics/
分享到:
相关推荐
将 Kefir 流映射到 WebWorker 入门 使用 bower 或 npm 安装 bower install kefir-webworker npm install kefir-webworker 用法 在您的主要 javascript 中使用mapWithWorker : Kefir . emitter ( ) . ...
Apollo链接仅允许您使用graphql客户端,并将Webworker用作支持常规查询和订阅的“服务器” 重要的提示 该存储库仅是概念证明,尚不能用于生产。 但是欢迎捐款:) 正在安装 安装软件包及其对等依赖项: yarn add ...
网络工作者 该库可帮助您快速入门并在TypeScript或JavaScript项目中与Web Worker一起运行。 :red_exclamation_mark: :red_exclamation_mark: :red_exclamation_mark: workerFunction在隔离的上下文中执行。 它不能...
演示示例: : 入门首先,运行开发服务器: npm run dev# oryarn dev用浏览器打开以查看结果。
async-thread-worker提出了基于客户端-服务器模型的 Web Worker 线程通信的抽象。 支持的功能有: await线程操作, 基本 Web Worker API 的集成(例如 transferables、 terminate()方法等),以及 用于实现客户端-...
支持Node.js环境的捆绑工人入门yarn add rollup-plugin-web-worker-loader --dev将插件添加到汇总配置中: import webWorkerLoader from 'rollup-plugin-web-worker-loader' ;export default { entry : 'src/index....
Create React App入门 这个项目是用引导的。 可用脚本 在项目目录中,您可以运行: yarn start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果您进行编辑,页面将重新加载。 您还将在控制台中看到任何 ...
入门 首先,您需要安装worker-loader : $ npm install worker-loader --save-dev 内联式 App.js import Worker from "worker-loader!./Worker.js" ; 设定档 webpack.config.js module . exports = { module : {...
web worker 是运行在后台的 JavaScript,不会影响页面的性能,更好的解释是,你可以使用web worker提供的一种简单的方法来为web内容在后台线程中运行脚本,这些线程在执行任务的过程中并不会干扰用户界面!...
async-taskjs是一个使用Web Worker在JavaScript中进行并行编程的库。 它提供了工作线程池和主线程与工作线程中执行的任务之间的消息通信系统。 ##安装 bower install async-taskjs 或在以下网址下载这些脚本: ...
只需运行以下命令进行安装: npm install worker-timers 然后,您可以从代码中要求workerTimers实例,如下所示: import * as workerTimers from 'worker-timers' ; 用法与全局范围内的相应功能完全相同(尽管有且...
在Java中使用RabbitMQ的异步Web-Worker模型 正如在“文章中所解释的那样,Web请求应尽快完成。 如果操作可能需要很长时间,则最好将其发送给工人测功机以在后台进行处理。 本文通过使用Spring 和以及Heroku 的示例...
通用,AOT,Web Worker就绪的lib启动程序。 用于您的Angular库 入门 叉这个 清除git历史记录git init . 在src添加您的源代码。 更改webpack.config.js的条目 更改package.json的输出文件名,以匹配您的src文件和...
web worker 是运行在后台的 JavaScript,不会影响页面的性能。 什么是 Web Worker? 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。 web worker 是运行在后台的 JavaScript,独立于其他...
教学录像:22分钟 ... 1.3.2 文件开始标签<... 7 1.3.3 文件头部标签<... 1.4.3 使用可视化软件制作页面 10 1.4.4 使用浏览器浏览HTML文件 14 1.4.5 使用HTML开发的明日图书网 14 ... 15.4.1 使用effectAllowed...
全书共分为12章,从HTML5的历史故事讲起,涉及了文档结构和语义、智能表单、视频与音频、画布、SVG与MathML、地理定位、Web存储与离线Web应用程序、WebSockets套接字、Web Worker多线程、微数据以及以拖曳为代表的...
渐进式Web应用程序入门套件目标提供易于阅读的serviceWorker.js ,它可以执行以下操作: 缓存一组特定的文件。 缓存serviceWorker.js文件中未包含的文件。 在页面加载时更新缓存的文件。 清除旧的缓存。 当脱机或...
默认情况下为多线程:遵循与移动版React Native完全相同的架构,您所有的react组件/应用逻辑都在Web worker中运行,而主线程则完全专注于渲染。 与移动版上的React Native相同的布局行为:通过对Yoga的自定义绑定...
此Web应用程序中使用的工具/库:版面使用路由使用Web Component Tester进行单元测试通过 Service Worker元素进行脱机优先设置端到端构建工具(包括 )入门请按照以下步骤设置工作区。 获取代码的副本。 如果您还没有...
渐进式Web App入门套件 一个简单的无样式支架,可快速启动新的React应用。 此应用程序已经配置了脱机和PWA支持,通过所有状态都会自动存储到IndexDB或LocaStorage中的用户计算机上,并在刷新时恢复。 Manifest和...