作家
登录

关于Web Workers你需要了解的七件事

作者: 来源: 2017-05-08 13:20:48 阅读 我要评论

; } $("#btnStart").click(function () { var worker = new Worker("scripts/lengthytask.js"); worker.addEventListener("message", function (evt) { alert(evt.data); },false); worker.postMessage(10000); }); }); </script></head><body> <form> <input type="button" id="btnStart" value="Start Processing" /> </form></body></html>

膳绫擎的HTML页面包含一个触发一些JavaScript处理的按钮(btnStart)。请留意,该网页引用了Modernizr和jQuery库。<script>块包含ready()办法处理法度榜样,并且该处理法度榜样又反过来处理btnStart的单击事宜。ready()处理法度榜样起首检查浏览器是否支撑web workers。这经由过程应用Modernizr的webworkers属性完成。如不雅浏览器不支撑Web workers,则会向用户显示一条缺点消息。

然后代码连接btnStart的点击事宜处理法度榜样。点击事宜处理法度榜样的代码很重要,因为它应用Worker对象在后台运行脚本。点击事宜处理法度榜样创建一个Worker对象并将其存储在本地变量——worker中。要在后台履行的JavaScript文件的路径在构造函数中传递。你将很快创建LengthyTask.js。然后,代码为Worker对象的消息事宜添加一个事宜处理法度榜样。当目标脚本(在此情况下为LengthyTask.js)将一些值发送回网页时,会激发消息事宜。消息事宜处理函数可以应用evt.data属性来拜访返回的值。最后,在Worker对象上调用postMessage()办法来触发LengthyTask.js的履行。 postMessage()办法还许可你将数据传递到目标脚本。在此示例中,将一个数字(10000)传递给postMessage(),postMessage()指导处理应持续的毫秒数量。你可以传递postMessage()调用中的任何其他数据,如JavaScript对象或字符串。

LengthyTask.js文件包含要在后台履行的代码,如下所示:

膳绫擎的代码处理worker thread的消息事宜。当主页面调用Worker对象上的postMessage()办法时,会激发消息事宜。消息事宜处理法度榜样经由过程运行某些毫秒的do-while轮回来模仿冗长的处理。此轮回运行的毫秒数大年夜主页传递(回想前面评论辩论的postMessage())。是以,evt.data在此示例中返回10000。一旦长时光操作完成,代码调用postMessage()会把处理结不雅发送回主页面。在本例中,传递currentDate的值(currentDate是一个Date对象)。

如不雅你运行主网页并单击Start Processing按钮,那么你将在10秒后收到alert()。同时,页面的用户界面不会被阻拦,你可以履行诸如滚动,点击等操作,注解来自LengthyTask.js的代码正在后台运行。

4. SharedWorker对象代表共享Web Worker

前面的示例应用了专用Web worker。让我们将同样的示例转换为应用共享Web worker。共享Web worker由SharedWorker对象表示。下面的代码显示潦攀来自立页的代码的修改版本:

有时Web Worker可能须要与Web办事器通信。例如,你可能须要驻留在某些RDBMS中的数据以便于客户端处理。要完成词攀类义务,你可以应用XMLHttpRequest对象向办事器端资本发出请求。实例化Worker对象和处理消息事宜的┞符个过程保持不变。然则,你须要向办事器端资本发出GET或POST请求。推敲下面的代码:

$(document).ready(function () {  if (!Modernizr.webworkers)  {    alert("This browser doesn't support Web Workers!");    return;  }  $("#btnStart").click(function () { var worker = new SharedWorker("scripts/sharedlengthytask.js"); worker.port.addEventListener("message", function (evt) { alert(evt.data); }, 	
				
			

  推荐阅读

  Go调度器: M,P和G

这是另一篇关于Go调剂器(scheduler)的文┞仿。 原文: GO SCHEDULER: MS, PS & GS by Uber工程师 Povilas。网上已经有很多关于Go调剂器的文┞仿了, 比如 Golang调剂器源码分析 ,多看一些>>>详细阅读


本文标题:关于Web Workers你需要了解的七件事

地址:http://www.17bianji.com/lsqh/35063.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)