告诉我们什么是网络工作者 他们的用途是什么

堵岚龙
导读 今天,我们就来谈谈什么是Web Workers,Web Workers是用来做什么的一些信息。很多朋友对这个信息感兴趣。边肖今天整理了一些相关资料

今天,我们就来谈谈什么是Web Workers,Web Workers是用来做什么的一些信息。很多朋友对这个信息感兴趣。边肖今天整理了一些相关资料,希望能帮助到有需要的朋友。

Workers由万维网联盟(W3C)和Web超文本应用技术工作组(WHATWG)定义,是一种JavaScript脚本。从执行的HTML页面,在运行的后台,可能已经从同一个HTML页面执行了独立的脚本。工作人员通常可以更有效地利用多核CPU。

网络工作者

Web Worker的作用是为JavaScript创建一个多线程环境,允许主线程创建工作线程,并将一些任务分配给后者运行。主线程运行时,工作线程在后台运行,它们互不干扰。等待工作线程完成计算任务,然后将结果返回给主线程。这样做的好处是,一些计算密集型或高延迟的任务由工作线程承担,主线程(通常负责UI交互)将会很流畅,不会被阻塞或变慢。

一旦成功创建了工作线程,它将一直运行,不会被主线程上的活动中断(比如用户点击按钮和提交表单)。这样有利于随时响应主线程的通信。但是,这也会导致Worker消耗更多的资源,不应该过度使用,一旦使用就应该关闭。

W3C和WHATWG认为Web Worker是长期运行的脚本,不会被响应点击或其他用户交互的脚本中断。为了防止这类人员受到用户活动的干扰,我们应该在保持响应速度的同时,让网页在后台运行长任务。

worker最简单的用途是在不中断用户界面的情况下执行计算密集型任务。

Worker为Web内容提供了一种在后台线程中运行脚本的简单方法。线程可以在不干扰用户界面的情况下执行任务。此外,它们可以使用XMLHttpRequest来执行I/O(尽管responseXML和channel属性始终为空)。创建后,工作线程可以通过将消息发布到代码指定的事件处理程序,将消息发送给创建它的JavaScript代码(反之亦然)。

Web Workers API

worker是由运行指定JavaScript文件的构造函数创建的对象(例如worker()),该文件包含将在Worker线程中运行的代码;工作线程正在另一个全局上下文中运行,该上下文不同于当前窗口。因此,使用窗口快捷方式获取当前全局范围(而不是自身)将在worker中返回一个错误。

对于专用工人,DedicatedWorkerGlobalScope对象表示工人的上下文(专用工人是指标准工人只在单个脚本中使用;共享工作器的上下文是SharedWorkerGlobalScope对象)。专用工作器只能由第一次生成它的脚本使用,而共享工作器可以由多个脚本同时使用。

您可以在工作线程中运行任何您喜欢的代码,但也有一些例外。比如在worker中,不能直接操作DOM节点,也不能使用window对象的默认方法和属性。但是在window对象下可以使用大量的东西,包括WebSockets,IndexedDB,以及FireFox OS特有的数据存储API等数据存储机制。有关详细信息,请参见工人可用的函数和类。

工作线程和主线程之间的数据传输就是通过这样的消息机制进行的。——双方使用postMessage()方法发送各自的消息,使用onmessage事件处理函数响应消息(消息包含在消息事件的data属性中)。在这个过程中,数据不是共享的,而是复制的。

只要运行在同一个父页面中,worker就可以依次生成新的worker;并且可以使用XMLHttpRequest进行网络I/O,但是XMLHttpRequest的responseXML和channel属性总是返回null。

敬业的工人

如前所述,专用工作器只能由生成它的脚本使用。这部分将讨论特殊工作器(运行特殊工作器)基本示例中的JavaScript代码:将你输入的两个数相乘。输入的数字将被发送到一个专门的工人,乘以专门的工人,然后返回到页面显示。

共享工人

多个脚本可以使用一个共享的worker,即使这些脚本被不同的窗口、iframe或worker访问。在这一部分中,我们将讨论共享工作器(运行共享工作器)的基本示例中的javascript代码:这个示例与专用工作器的基本示例非常相似,只是有两个可用的函数存储在不同的脚本文件中:两个数的乘法函数和平方函数。这两个脚本使用同一个工人来完成实际的操作。

关于线程安全

工作接口将生成真正的操作系统级线程。如果你不太小心,那么并发性会对你的代码产生有趣的影响。但是,对于web worker来说,与其他线程的通信点会被小心控制,这意味着你很难引起并发问题。您不能访问非线程安全的组件或DOM。此外,您需要序列化对象,以便用特定数据与线程进行交互。所以如果你不努力,你真的不会犯错。

这是一些关于什么是网络工作者和网络工作者在做什么的信息。边肖整理的资料希望对童鞋们有所帮助。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!