web worker 是运行在后台的 JavaScript,不会影响页面的性能。

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。


  以上是W3School对WebWorker的定义,讲的非常明确。在这段解释中,我一眼就看到了一句话“执行脚本时,页面状态是不可响应的”,这让我想到了BOM的一些系统对话框,像alert之类的。大家都知道当有alert之类的消息窗口时,它是模态且同步的,整个HTML页面元素和脚本都会停止无法点击,直到点击了确定,脚本才会继续执行。如果按照HTML5的Web Worker的后台工作的性质,是否意味着可以不受限于对话框的限制,继续执行代码。本着实践出真知,下面一起来看看!

  1.  我们首先看看正常情况,一个自动累加器是如何运作的。

第一张图,附上HTML结构。我们是用一个非常常见的方法,也就是通过一个setTimeout定时器,不断重复调用自身,达到1S增加一次的效果。然后把累加的值,放到output标签内。然后我们让它跑起来吧!

我们可以发现,当我们点击alert按钮的时候,数字不再往上累加。这是我们非常常见的啦,因为对话框是同步执行的,意味着不点击就会造成线程阻塞。难不成用了Web Worker就可以继续运行?我们接下来继续看。

  2.  使用Web Worker的累加器。

在我们看运行的GIF之前,我们先看看如何构建一个Web Worker。

首先,我们需要检测一下浏览器是否支持Worker,毕竟是一个HTML5的新功能。然后直接通过new一个Worker,再把需要执行的脚本文件作为一个参数传进去。然后通过监听这个Web Worker的message事件,数据放在event.data进行实时的反馈。既然有一个message事件,那么那个需要执行的脚本自然会有一个发送message的操作,我们看一下是什么样子的。

也就是postMessage(data),通过这个API我们可以将Worker里的数据通过message传出去。然后外部再监听message事件,进行数据更新。那说了这么多,那真正的问题是否解决了呢?也就是那个,Worker里执行的脚本是独立于其它脚本,自行在后台运行的。废话不多说,直接看效果!

非常的牛逼!我忍不住打了几个字。我们可以清楚的看到,对于单线程的JavaScript来说,即使模态框阻塞了线程,计数器的数字依旧是在做改变的。(这里有些小疑问,既然消息框会让页面的脚本停止运行,但是为什么message事件监听触发的innerHTML依旧是可以运行?难道事件触发机制,也可以避免受模态框的影响?有知道的人可以帮忙解答一下,谢谢~!)从这里我们可以明显看到,确实在web worker的Js脚本是独立的,并不会和当前页面的脚本相冲突。当然,这里不得不提一句,Web Worker的Js脚本的作用域和当前页面Js脚本作用域并不能共享,换言之也就是,它们的全局作用域并不是同一个,Worker的全局作用域是它自己本身,所以Web Worker自然也就无法操作DOM元素。

  那我们可以用 Web Worker 做什么呢?因为Js的单线程,我们必须要防止过大的计算堵塞了用户页面,那通过这个HTML5最新的 Web Worker 技术,我们可以把一些非常耗时的计算都放在外部,以免影响了用户体验。

  最后,这里同样是抛砖引玉。希望可以通过这个可以帮助更多的人,了解到较新的HTML5技术,然后主动的去探寻更多的Web技术。


  有同学评论说,Chrome无法通过WebWorker加载本地的Js,这个确实是,本人调试的时候用的是Firefox。但是也是有解决方法的,我们可以通过用Node或者WAMP,快速搭建一个本地服务器,进行WebWorker测试。对于我们励志的前端工程师来说,用Node搭建简直飞快啊。这里我就不详细说了,我再次推荐一个前端工具框架——F.I.S,百度出品。我们通过npm全局装好后,直接进入demo的文件夹进行一下fis release,然后启动服务器fis server start。接着我们就可以在浏览器通过localhost访问我们这次的demo了!那我们看一下在Chrome中的运行情况吧。

我们可以看到,Chrome也没报错,地址已经换成了本地地址了。但是我们可以看到Chrome下,并没有Firefox那么酷炫的实时渲染,而是和平常中一样的停止了。但是当我们点击确定,计数器已经跳过了许多数字,这说明Web Worker的的确确是独立于页面脚本,自己在后台运作的。

通过一次实验来了解HTML5的 Web Worker的更多相关文章

  1. html5之web worker

    Web Worker   在本文中 与 Web Worker 进行双向通信 WindowTimers 在 IE10 Platform Preview 4 中对 Web Worker 的更新 API 参 ...

  2. JS利用HTML5的Web Worker实现多线程

    需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...

  3. html5 web worker学习笔记(记一)

    (吐槽:浏览器js终于进入多线程时代!) 以前利用setTimeout.setInterval等方式的多线程,是伪多线程,本质上是一种在单线程中进行队列执行的方式.自从html5 web worker ...

  4. JavaScript多线程之HTML5 Web Worker

    在博主的前些文章Promise的前世今生和妙用技巧和JavaScript单线程和浏览器事件循环简述中都曾提到了HTML5 Web Worker这一个概念.在JavaScript单线程和浏览器事件循环简 ...

  5. 基于 HTML5 的 Web SCADA 报表

    背景 最近在一个 SCADA 项目中遇到了在 Web 页面中展示设备报表的需求.一个完整的报表,一般包含了筛选操作区.表格.Chart.展板等多种元素,而其中的数据表格是最常用的控件.在以往的工业项目 ...

  6. 过段时间逐步使用HTML5新增的web worker等内容

    想来快2017年了,2013年前的手机应该很少有人用了,以后逐渐使用HTML5新增的高级API吧. 先把web worker的内容再熟悉一下,因为微软虚拟学院的'面向有经验开发人员的 JavaScri ...

  7. HTML5离线Web应用实战:五步创建成功

    [IT168 技术]HTML5近十年来发展得如火如荼,在HTML 5平台上,视频,音频,图象,动画,以及同电脑的交互都被标准化.HTML功能越来越丰富,支持图片上传拖拽.支持localstorage. ...

  8. HTML5 的web储存: localStorage & sessionStorage

    早期的浏览器使用cookie储存,HTML5新增web储存,包括:localStorage 和 sessiongStorage; localStorage:可以永久储存: sessionStorage ...

  9. HTML5 Web Worker的使用

    Web Workers 是 HTML5 提供的一个javascript多线程解决方案,我们可以将一些大计算量的代码交由web Worker运行而不冻结用户界面. 一:如何使用Worker Web Wo ...

随机推荐

  1. Mysql:常用代码

    C/S: Client Server B/S: Brower Server Php主要实现B/S .net IIS Jave TomCat LAMP:L Mysql:常用代码 Create table ...

  2. VCC_VID_VTT等的含义

    VCC--为直流电压.在主板上为主供电电压或一般供电电压.例如 一般电路VCC3--+3V供电.主板上VCC3: 3.3V VCC25: 2.5V VCC333: 3.3V VCC5: 5V VCC1 ...

  3. LingPipe-TextClassification(文本分类)

    What is Text Classification? Text classification typically involves assigning a document to a catego ...

  4. 新装的win7 64位系统上装了IE11,想调试网页的时候,按F12,工具会出来,但是没法正常使用,出现空白。

    Windows专区开了一帖,没人应.这边再开一帖,看看各位遇到过没.如题,新装的win7 64位系统上装了IE11,想调试网页的时候,按F12,工具会出来,但是没法正常使用.尤其是想切换文档模式,只能 ...

  5. C++ STL之vector容器的基本操作

    注意事项:特别注意任何时候同时使用两个迭代器产生的将会是一个前闭后开的区间(具体见插入和删除的例子)特别注意begin()指向的是vec中的第0个元素,而end是指向最后一个元素的后面一个位置(不是最 ...

  6. ACM - ICPC World Finals 2013 D Factors

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 问题描述 一个最基本的算数法则就是大于1的整数 ...

  7. 基于XMPP的即时通信系统的建立(一)— XMPP基础概念

    相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...

  8. bzoj2788

    明显是一个差分约束系统 对于第一种限制,其实就是x[a]+1<=x[b] x[b]-1<=x[a] 根据三角不等式很容易建图 但这题他比较奇怪,问的是X最多不同取值的个数 根据这张图的特殊 ...

  9. UVALive 3486/zoj 2615 Cells(栈模拟dfs)

    这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...

  10. 【JSP】<meta>标签用法

    转载自:http://blog.sina.com.cn/s/blog_65c74cce0102v39z.html  非常感谢这位博主,急着用,改日再细细品味重新整理这篇博文. http-equiv M ...