留意用粗体字标记的代码。它创建了一个SharedWorker实例,并在构造函数中传递SharedLengthyTask.js。你将很快创建此文件。然后,代码将消息事宜处理法度榜样连接到SharedWorker对象的端口对象。消息处理法度榜样函数履行与前面示例中雷同的工作。然后代码在端口对象上调用start()办法。最后,在端口对象上调用postMessage()办法将数据(10000)发送到共享worker thread。
SharedLengthyTask.js文件包含以下代码:
代码起首声明一个名为port的变量,用于存储端口对象的引用。此次处理了两个事宜——connect和message。当与共享Web worker建立连接时,会触发connect事宜。 connect事宜处理法度榜样捕获evt.port [0]对象并将其存储在之前声明的端口变量中。然后在端口对象上连接消息事宜处理法度榜样。调用端口对象的start()办法来开端侦听该端口上的消息。消息事宜处理法度榜样几乎与你在前面的示例中编写的消息事宜处理法度榜样雷同,除了它附加到端口对象这一点。此外,在端口对象上调用postMessage(),以将处理结不雅发送到主页面。
5. Web Workers可以应用XMLHttpRequest与办事器通信
addEventListener("message", function (evt) { var xhr = new XMLHttpRequest(); xhr.open("GET", "lengthytaskhandler.ashx"); xhr.onload = function () { postMessage(xhr.responseText); }; xhr.send(); }, false);膳绫擎显示的代码创建了XMLHttpRequest对象的实例。然后调用open()办法,并指定向办事器端资本LengthyTaskHandler.ashx(一个ASP.NET通用处理法度榜样)发出GET请求。(固然此示例应用ASP.NET通用处理法度榜样,但你可以应用任何其他办事器端资本。)然后它处理XMLHttpRequest对象的load事宜并调用postMessage()。 xhr.responseText作为postMessage()的参数。xhr.responseText将是ASP.NET通用处理法度榜样作为响应返回的值。请求完成时激发load事宜。
LengthyTaskHandler.ashx包含以下代码:
namespace WebWorkersDemo{ public class LengthyTaskHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { System.Threading.Thread.Sleep(10000); context.Response.ContentType = "text/plain"; context.Response.Write("Processing successful!"); } public bool IsReusable { get { return false; } } }}正如你可以看到,ProcessRequest()经由过程在Thread类上调用Sleep()办法来模仿一些冗长的处理,并阻拦履行10秒。然后它返回一个成功消息“Processing successful!”给调用者。如不雅你在进行这些更改后运行主网页,你会发明在10秒后,将显示一个包含此成功消息的戒备对话框。
6.你可以应用缺点事宜捕获未处理的缺点
如不雅你的Web worker正在进行一些复杂的操作,那么你可能须要添加缺点处理到主网页代码,以便在worker中出现任何未处理缺点时,可以采取恰当的操作。这可以经由过程处理Worker对象的缺点事沂攀来完成。每当work thread中存在任何未处理的缺点时,就会抛掉足误事宜。以下代码显示了若何完成此操作:
大年夜膳绫擎的代码可以看出,缺点处理法度榜样已经连接到worker对象的缺点事宜。缺点处理函数接收一个事宜对象,而该对象供给缺点信息,例如产生缺点的行号(evt.lineno),缺点消息(evt.message)和产生缺点的文件(evt.filename)。
7.你可以应用Terminate()办法终止worker
有时你可能会想要撤消worker中正在履行的义务。对此,你可以经由过程调用其terminate()办法来摧毁Worker。一旦Worker终止,你就不克不及从新应用或从新启动它。当然,你老是可以创建另一个Worker实例并应用它。但请记住,terminate()会急速杀逝世了worker,并且不会给你任何机履行清理操作。
总结
Web workers许可你在后台履行脚本而不冻结网页用户界面。有两种类型——专用web worker和共享web worker。每个网页创建专用web worker,而跨多个网页应用共享web worker共享。Worker类代表专用web worker,SharedWorker类代表共享web worker。本文介绍了若何应用这两种类型,文中还评论辩论了若何处理缺点以及webworker若何应用XMLHttpRequest与web办事器通信。
译文链接:http://www.codeceo.com/article/7-things-about-web-workers.html
推荐阅读
这是另一篇关于Go调剂器(scheduler)的文┞仿。 原文: GO SCHEDULER: MS, PS & GS by Uber工程师 Povilas。网上已经有很多关于Go调剂器的文┞仿了, 比如 Golang调剂器源码分析 ,多看一些>>>详细阅读
地址:http://www.17bianji.com/lsqh/35063.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示