说一说Web Workers是什么及Web Workers有什么用
Web Workers 被定义万维网联盟(W3C)和网络超文本应用技术工作组(WHATWG),是一个 JavaScript 的脚本,从执行的 HTML 页面,在运行的背景,独立脚本的可能也已经从同一 HTML 页面执行。Web worker 通常能够更有效地利用多核 CPU。
(资料图片)
Web Workers
Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。这样的好处是,一些计算密集型或高延迟的任务,被 Worker 线程负担了,主线程(通常负责 UI 交互)就会很流畅,不会被阻塞或拖慢。
Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。
W3C 和 WHATWG 将 Web Worker 设想为长时间运行的脚本,这些脚本不会被响应点击或其他用户交互的脚本打断。防止此类工作人员受到用户活动的干扰,应该使网页在后台运行长任务的同时保持响应速度。
worker 的最简单用法是执行计算量大的任务,而不会中断用户界面。
Web Worker 为 Web 内容在后台线程中运行脚本提供了一种简单的方法。线程可以执行任务而不干扰用户界面。此外,他们可以使用 XMLHttpRequest 执行 I/O (尽管 responseXML 和 channel 属性总是为空)。一旦创建, 一个 worker 可以将消息发送到创建它的 JavaScript 代码, 通过将消息发布到该代码指定的事件处理程序(反之亦然)。
Web Workers API
一个 worker 是使用一个构造函数创建的一个对象(e.g. Worker()) 运行一个命名的 JavaScript 文件 – 这个文件包含将在工作线程中运行的代码; workers 运行在另一个全局上下文中,不同于当前的 window. 因此,使用 window 快捷方式获取当前全局的范围 (而不是 self) 在一个 Worker 内将返回错误。
在专用 workers 的情况下,DedicatedWorkerGlobalScope 对象代表了 worker 的上下文(专用 workers 是指标准 worker 仅在单一脚本中被使用;共享 worker 的上下文是 SharedWorkerGlobalScope 对象)。一个专用 worker 仅仅能被首次生成它的脚本使用,而共享 worker 可以同时被多个脚本使用。
在 worker 线程中你可以运行任何你喜欢的代码,不过有一些例外情况。比如:在 worker 内,不能直接操作 DOM 节点,也不能使用 window 对象的默认方法和属性。然而你可以使用大量 window 对象之下的东西,包括 WebSockets,IndexedDB 以及 FireFox OS 专用的 Data Store API 等数据存储机制。查看 Functions and classes available to workers 获取详情。
workers 和主线程间的数据传递通过这样的消息机制进行——双方都使用 postMessage()方法发送各自的消息,使用 onmessage 事件处理函数来响应消息(消息被包含在 Message 事件的 data 属性中)。这个过程中数据并不是被共享而是被复制。
只要运行在同源的父页面中,workers 可以依次生成新的 workers;并且可以使用 XMLHttpRequest 进行网络 I/O,但是 XMLHttpRequest 的 responseXML 和 channel 属性总会返回 null。
专用 worker
如前文所述,一个专用 worker 仅仅能被生成它的脚本所使用。这一部分将探讨 专用 worker 基础示例 (运行专用 worker) 中的 JavaScript 代码:将你输入的 2 个数字作乘法。输入的数字会发送给一个专用 worker,由专用 worker 作乘法后,再返回给页面进行展示。
共享 worker
一个共享 worker 可以被多个脚本使用——即使这些脚本正在被不同的 window、iframe 或者 worker 访问。这一部分,我们会讨论共享 worker 基础示例(运行共享 worker)中的 javascript 代码:该示例与专用 worker 基础示例非常相像,只是有 2 个可用函数被存放在不同脚本文件中:两数相乘函数,以及求平方函数。这两个脚本用同一个 worker 来完成实际需要的运算。
关于线程安全
Worker 接口会生成真正的操作系统级别的线程,如果你不太小心,那么并发会对你的代码产生有趣的影响。然而,对于 web worker 来说,与其他线程的通信点会被很小心的控制,这意味着你很难引起并发问题。你没有办法去访问非线程安全的组件或者是 DOM,此外你还需要通过序列化对象来与线程交互特定的数据。所以你要是不费点劲儿,还真搞不出错误来。
以上就是关于Web Workers是什么及Web Workers有什么用这方面的一些信息了 小编整理的这些讯息希望对童鞋们有所帮助
相关阅读
-
说一说Web Workers是什么及Web Workers有什么用
WebWorkers被定义万维网联盟(W3C)和网络超文本应用技术工作组(WHATW... -
焦点要闻:如何成为国家老年大学的“银...
3月3日,国家老年大学正式揭牌。学感兴趣的课程,交志趣相投的朋友... -
世界新动态:苗苗是哪里人多大_苗苗是哪...
1、苗苗的国籍是中国。苗苗,原名黄禾,毕业于北京广播学院,任职于... -
双动力无差别外观,长安深蓝S7内饰官图曝光
3月5日,长安深蓝S7在上海首发亮相。新车定位中型SUV,是长安深蓝旗... -
快播:官降6万,日产艾睿雅还得接着降?
官降6万,对艾睿雅销量的促进作用我只能说很小,对日产来说,想要快... -
天天资讯:花美男拉面店 电视剧(花美...
1、1 Happy-유리아Yuria(DNPD)2 Sun-프랜시스Francis(DNPD)3 H... -
【独家】科技资讯:这款神秘的摩托...
一款全新的摩托罗拉智能手机正在崛起,但不幸的是,我们不知道如何... -
今天的工人希望延长他们的职业生涯的3个...
许多老年人的工作时间比预期的要长,而且往往不是选择。事实上,根... -
世界快看点丨谍照 | 疑似智己LS5谍照...
3月5日消息,互联网上曝光了一组疑似智己全新SUV的路试谍照,整车风... -
“筑梦赢携手PTAH”诗越团队招商会成功举办
经济要发展,项目是支撑,招商是关键。2023年2月26日,创世国际外交... -
环球热资讯!s7520u怎么样(s7520u)
1、是不是手机不支持呢?如果支持的话试试JAR格式的上那个奇书网下载... -
天天快看:蝶恋花歌曲原唱牛奶咖啡(蝶...
1、花儿花儿为谁开一年春去春又来花儿说它为一个人等待无可奈何花落... -
工信部部长:稳住新能源汽车大宗消费,...
3月5日,工信部部长金壮龙在首场“部长通道”上表示,首先要稳住新... -
天天快资讯丨工信部部长金壮龙:中国在5...
今天(3月5日)上午,第十四届全国人民代表大会第一次会议在人民大... -
天天头条:科技部部长谈ChatGPT用梅西举...
3月5日,科技部部长王志刚谈ChatGPT:它有很好的计算方法,同样一种... -
生态环境保护阻碍中国经济发展?生态环...
今天(3月5日)上午,第十四届全国人民代表大会第一次会议在人民大... -
演绎文物传承故事,故宫首部儿童剧《甪...
近日,以故宫瑞兽“甪端”为原型的故宫博物院首部音乐儿童剧《甪端... -
世界时讯:德云社全体成员图片高清壁纸...
1、德云社主要成员具体如下:一、德云社演员郭德纲(班主)、于谦、... -
当前观点:网络资讯:微视APP如何设置隐...
方法步骤1 首先打开手机,我们在手机上找到微视APP,点击该软件进... -
世界最资讯丨滚字开头的成语四个字_滚字...
1、1、滚鞍下马滚瓜烂熟滚瓜溜油滚瓜溜圆滚瓜流水滚滚当潮滚滚而来...