Web Workers

为什么用web workers?

浏览器的原理中决定了页面打开只有一个主线程——UI渲染线程,如果线程中有耗时的程序(js)会阻塞线程,使得页面中其他的UI无法渲染,我们一般把js文件放在body结束之前,或者优化算法复杂度。但是根本上解决还是线程的问题。在HTML5中新增了web Workers的方法,用来解决JavaScript多线程的问题。把一些耗时的程序放在单独的js中,和浏览器的UI渲染线程同步执行。

如何用:

1.首先把需要单独执行的js代码单独放在一个js文件(such as fanfan.js);

    onmessage方法接收主线程发送过来的数据

    postMessage(data)向主线程发送数据

  /**

  * Created by fanfan on 2016/11/17.

  */

 onmessage=function(e){//onmessage方法接收主线程发送过来的数据

 var n= e.data;

     n=parseInt(n);

 var result =isPrime(n);

 postMessage(result);//postMessage(data)向主线程发送数据

 }

 function isPrime(num){//判断质数的算法

 var result = false;

 for(vari=2; i<num; i++){

 if(num%i===0){

 break;

         }

     }

 if(i===num){

         result = true;  //是质数

     }

 return result;

 }

fanfan.js

2.在使用js文件的HTML页面中调用js文件

①创建一个web worker线程

var w=new Worker(url);

②传递数据给worker

w.postMessage(data);

③接受worker返回的数据

w.onmessage=function(e){

console.log(e.data);

}

④释放web worker占用的资源

w.terminate();

    完整代码: 

 <!DOCTYPE html>

 <html>

 <head lang="en">

 <meta charset="UTF-8">

 <title></title>

 <style>

 div{

 border:1px solid #ccc;

 width: 100px;

 height: 100px;

         }

 </style>

 </head>

 <body>

 <h3>判断质数</h3>

 <input type="text" id="num"/><button id="btn">开始判断</button>

 <div id="r"></div>

 <script>

 btn.onclick=function() {//btn监听事件

 var n=num.value;

 var w = new Worker('worker.js');//实例化一个worker对象

 w.postMessage(n);//向worker发送数据

 w.onmessage=function(e){//获取worker返回的数据

 r.innerHTML= e.data;

             }

         }

 </script>

 </body>

 </html>

index.html

以上事例结果为在html页面输入一个值,然后再worker中判断是否为质数,然后把结果打印在页面上的过程

注意事项:

本地运行index.html文件,在chrome中出现错误(chrome不支持),但是在firefox运行正确。

在web服务器环境下chrome就可以正常运行了。

web worker的跨域访问限制

在index.html中new worker(url)来创建work对象,加载的js文件不能跨域!

局限性:在web worker的js中无法访问index.html中的DOM等,很大局限。所以看情况使用。

HTML5新增的一些属性和功能之八——web Worker的更多相关文章

  1. HTML5新增的一些属性和功能之一

    大致可以分为10个方面: HTML5表单元素和属性 表单2.0 视音频处理 canvas绘图 SVG绘图 地理定位 拖放技术 web work web storage web socket 一.新的i ...

  2. HTML5新增的一些属性和功能之六——拖拽事件

    拖放事件的前提是分为源对象和目标对象,你鼠标拖着的是源对象,你要放置的位置是目标对象,区分这两个对象是因为HTML5的拖放事件对两者是不同的. 被拖动的源对象可以触发的事件: 1).ondragsta ...

  3. HTML5新增的form属性简介——张鑫旭

    一.引言 HTML5中新增了一个名为form的属性,是一个与处理表单相关的元素. 在HTML4或XHTML中,我们要提交一个表单,必须把相关的控件元素都放在<form>元素下.因为表单提交 ...

  4. HTML5新增标签与属性

    目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placehold ...

  5. HTML5新增的表单验证功能

    一.HTML5表单的特点: HTML5 表单增加了许多内置的控件和控件属性 XHTML 中需要放在 form 之中的诸如 input/button/select/textarea 等标签元素,在 HT ...

  6. html5新增及废除属性

    html5中,在新增加和废除很多元素的同时,也增加和废除了很多属性. 一.新增属性 1.表单属性 a.autofocus 对input[所有类型].select.textarea与button指定au ...

  7. HTML5新增input标签属性

    一. input type属性 <form action=""> 邮箱<input type="email" name="" ...

  8. 初学HTML5系列二:HTML5新增的事件属性

    Window事件属性: 属性 值 描述 onafterprint  script 文档打印之后运行的脚本. 属性发生于用户设置页面打印并且打印对话框已出现之后. onbeforeprint  scri ...

  9. 第十课html5 新增标签及属性 html5学习5

    一.常用新增标签 1.header:定义页面的页眉头部 2.nav:定义导航栏 3.footer:定义页面底部,页脚 4.article:定义文章 5.section:定义区域 6.aside:定义侧 ...

随机推荐

  1. Web服务的体系架构

    Web简介: Web是WWW(World Wide Web)的简称,又称为万维网,是建立在客户机/服务器上的,以HTML语言和HTML协议为基础,提供面向Internet服务的,有一致用户界面的一种信 ...

  2. [置顶] .net技术类面试、笔试题汇总1

    1.简述 private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内 ...

  3. 自定义View-6 状态按钮 滑动 点击

    View public class SwitchButton extends View implements OnClickListener, OnTouchListener {     privat ...

  4. DataGrid( 数据表格) 组件[3]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  5. python自动化执行脚本

    ---恢复内容开始--- 1 (1)首先在你的.py文件上加上一行代码注释: #!/usr/local/bin/python2.7 (2)终端下执行: crontab -e 进入后,输入i 进入可编辑 ...

  6. 解决VS2008闪退的问题

    问题:打开VS2008项目后,应该是加载完所有文件,立即断掉了IDE,查看事件器,发现图片中的错误描述,google了很久没有找到解决方案,后来还是自己动手解决这个问题花了一早上的时间,哎,只要把工程 ...

  7. Querylayer(查询图层) - 浅谈

    Querylayer(查询图层)是通过 SQL 查询定义的图层或独立表.通过 Querylayer 可将空间信息和非空间信息都存储在DBMS 中,从而使这些信息可以轻松地整合到 ArcMap 中的各 ...

  8. SQL GROUP BY 语句

    合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 ...

  9. C++ 知识点 2

    基本类型常量 const int a; int const a; const int *a; int * const a; int const * a const; 之间的区别? const int ...

  10. amchart

    amchart能够根据提供的数据便捷的生成好看的图标,曾在项目中遇到使用falsh版以支持对js支持不好的低版本浏览器,但是现在官网上都是js版本的,flash版的文档都没有,搜索结果一般都是链接到博 ...