Web Workers是什么

Web Workers是一个JavaScript的脚本,从执行的HTML页面,独立脚本的可能也已经从同一HTML页面执行。作用是为JavaScript创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。

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,此外你还需要通过序列化对象来与线程交互特定的数据。所以你要是不费点劲儿,还真搞不出错误来。

(0)
时间不会说谎  的头像时间不会说谎  

相关推荐

  • 理光7001做不了2801,可能的原因和解决方案

    作为一款功能强大的复印机,理光7001在日常使用中可以完成各种复印、打印、扫描等任务。但有时候我们会发现,理光7001无法完成某些任务,比如说做不了2801。这是为什么呢?下面我们来分析可能的原因,并提供解决方案。一、可能的原因1.纸

    2023年10月30日
  • 小米2s与小米3对比,哪个更值得购买?

    作为小米手机的两个经典机型,小米2s和小米3都曾经风靡一时,备受用户喜爱。那么,这两款手机之间到底有何区别呢?在购买时,应该选择哪一个呢?下面,我们就来对这两款手机进行一番对比,看看哪一个更值得购买。外观设计小米2s与小米3的外观设计有

    2023年10月20日
  • 怎么关联另一个手机的位置

    首先在两部手机上都下载安装思归,将第一部手机先登录思归,并把第一部手机设为受控端,设置后台运行,勾选监控选项,选择开始监控,接着打开第二个手机登录思归,即可通过查询轨迹下方的放大还…

  • 网贷被骗贷款没到账要还款吗

    不要还款。**被骗资金没到账可能本身就是一个网络骗局,通过申请人去填写信息或交纳一定的手续费,来骗取申请人的信息和钱财,因此不可能到你的账上。如果**没到账,从民事关系看,属于借贷…

  • 现在win7好用吗,是否值得升级到更高版本

    作为MicrosoftWindows家族中备受欢迎的一个版本,Windows7在2010年发布后迅速赢得了用户的喜爱。但是,如今,Windows7已经成为了一个过时的操作系统,许多人都在考虑是否值得升级到更高版本的Windows。在本

    2023年12月22日
  • 怎么查询酒店宾馆入住登记记录

    只有公安部门可以查到,普通人是查不到的。普通公民,通过身份证根本无法查询酒店登记记录:1、普通公民无权查询。2、即使是公安人员也无权随便查询。3、只有侦查或调查的需要,侦查人员才能…

  • 手机如何定位车辆

    通过车辆上安装GPS定位器,厂家会配置相关的APP,车主在手机上下载APP后登陆就可以实时查看车辆位置状态,实现手机实时监控车辆。 要想把汽车跟手机连接在一起,实现手机实时监控车辆…

  • 音箱背后的光纤接口怎么用,详细步骤解析

    随着科技的不断进步,音箱的连接方式也在不断更新换代。其中,光纤接口作为一种高清晰度数字音频传输方式,被越来越多的音箱所采用。但是,对于不熟悉这种接口的用户来说,如何正确使用音箱背后的光纤接口却是一件头疼的事情。本文将为大家详细介绍音箱背后的

    2023年12月13日
  • 装个路由器就有wifi吗,需要注意哪些问题

    在如今的数字时代,无论是工作还是娱乐,网络已经成为了人们生活中必不可少的一部分。而无线网络,也就是我们常说的wifi,更是让人们的生活变得更加便捷和舒适。所以,在家里安装一个路由器,让家中有wifi,是非常有必要的。那么问题来了,装个路由器

    2023年11月20日
  • 家里玻璃贴膜,如何正确选择和安装

    家里的玻璃窗户不仅仅是为了美观,还能起到隔音、隔热、防紫外线等作用。然而,有些家庭可能会发现玻璃窗户的隐私性不够好,或者太过普通无法满足个性化需求,这时候,家里玻璃贴膜就成为了一个很好的选择。本文将详细介绍如何正确选择和安装家里的玻璃贴膜。

    2023年10月23日
  • CloudLinux是什么

    CloudLinux 是一个基于 CentOS 的 Linux 发行版,是专为虚拟主机开发的操作系统。CloudLinux 可以有效的限制共享账户占用资源,使得每台服务器能够放置更…

  • 笔记本怎样打开wifi开关,详细步骤解析

    作为现代人,无线网络已经成为我们日常生活中必不可少的一部分。然而,有时候我们会遇到笔记本无法连接无线网络的问题,这时候我们需要检查笔记本的wifi开关是否打开。但是,有些人可能会不知道怎样打开笔记本的wifi开关。在本篇文章中,我将会详细介

    2023年12月8日
  • 海信曲面电视,值得购买吗?

    作为一家知名的电视品牌,海信一直以来都是消费者的首选之一。而在曲面电视领域,海信更是推出了多款曲面电视,不仅拥有出色的画质表现,还具备着时尚的外观设计。那么,海信曲面电视是否值得购买呢?接下来,我们就来一探究竟。一、外观设计海信曲面电视

    2023年12月12日
  • 会议投影仪什么牌子好,如何选择适合自己的投影仪

    作为一种重要的会议设备,投影仪的品牌和型号多种多样,对于不同的用户来说,选择适合自己的投影仪是非常重要的。那么,会议投影仪什么牌子好呢?下面,我们将为大家介绍几个比较好的投影仪品牌,并提供一些选购建议。一、投影仪品牌推荐1.爱普生爱普

    2023年12月3日
  • 东菱面包机XBM一1028g食谱,如何制作美味面包

    作为一款优秀的面包机,东菱面包机XBM一1028g在市场上备受欢迎。它不仅可以帮助我们轻松制作美味的面包,还可以制作各种口味的面包,满足不同人的口味需求。那么,如何制作美味的面包呢?本文将为大家详细介绍东菱面包机XBM一1028g的制作方法

    2023年11月24日

发表回复

登录后才能评论