HTML5新增的一些属性和功能之八——web Worker
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的更多相关文章
- HTML5新增的一些属性和功能之一
大致可以分为10个方面: HTML5表单元素和属性 表单2.0 视音频处理 canvas绘图 SVG绘图 地理定位 拖放技术 web work web storage web socket 一.新的i ...
- HTML5新增的一些属性和功能之六——拖拽事件
拖放事件的前提是分为源对象和目标对象,你鼠标拖着的是源对象,你要放置的位置是目标对象,区分这两个对象是因为HTML5的拖放事件对两者是不同的. 被拖动的源对象可以触发的事件: 1).ondragsta ...
- HTML5新增的form属性简介——张鑫旭
一.引言 HTML5中新增了一个名为form的属性,是一个与处理表单相关的元素. 在HTML4或XHTML中,我们要提交一个表单,必须把相关的控件元素都放在<form>元素下.因为表单提交 ...
- HTML5新增标签与属性
目录 一.HTML5新增属性 1.1.contextmenu 1.2.contentEditable 1.3.hidden 1.4.draggable 1.5.data-* 1.6.placehold ...
- HTML5新增的表单验证功能
一.HTML5表单的特点: HTML5 表单增加了许多内置的控件和控件属性 XHTML 中需要放在 form 之中的诸如 input/button/select/textarea 等标签元素,在 HT ...
- html5新增及废除属性
html5中,在新增加和废除很多元素的同时,也增加和废除了很多属性. 一.新增属性 1.表单属性 a.autofocus 对input[所有类型].select.textarea与button指定au ...
- HTML5新增input标签属性
一. input type属性 <form action=""> 邮箱<input type="email" name="" ...
- 初学HTML5系列二:HTML5新增的事件属性
Window事件属性: 属性 值 描述 onafterprint script 文档打印之后运行的脚本. 属性发生于用户设置页面打印并且打印对话框已出现之后. onbeforeprint scri ...
- 第十课html5 新增标签及属性 html5学习5
一.常用新增标签 1.header:定义页面的页眉头部 2.nav:定义导航栏 3.footer:定义页面底部,页脚 4.article:定义文章 5.section:定义区域 6.aside:定义侧 ...
随机推荐
- Kinect for Windows V2和V1对照开发___彩色数据获取并用OpenCV2.4.10显示
V1彩色分辨率:640x480 V2彩色分辨率:1920x1080 1,打开彩色图像帧的方式 对于V1: 使用NuiImageStreamOpen方法打开 hr = m_PNuiSensor-> ...
- [置顶] .net技术类面试、笔试题汇总1
1.简述 private. protected. public. internal 修饰符的访问权限. private : 私有成员, 在类的内部才可以访问. protected : 保护成员,该类内 ...
- Android应用程序的安装位置
Android应用程序的默认安装位置以及是否可移动取决于开发者在其AndroidManifest.xml中的设置: <manifestxmlns:android="http://s ...
- Java基础知识强化36:StringBuffer类之StringBuffer的概述
1. StringBuffer类概述: (1)String的缺陷: 我们如果对字符串进行拼接操作,每次拼接,都会构造一个新的String对象,既耗时,又浪费空间.如下图: (2)StringBuffe ...
- 小学生之KTV播放原理
第一步: 创建一个Song类 //歌曲名称 public string SongName { get; set; } //歌曲路劲 public string SongPath { get; set ...
- Unity5.3——UI之Canvas
原文:http://docs.unity3d.com/Manual/UISystem.html Canvas 所有的UI都应该放在Canvas里面(子层).Canvas是一个带有Canvas组件的Ga ...
- c# 基础复习1
1. 类和对象 1.1 类和对象的概念 类:对象的类型,它不同于 int 等基本数据类型,因为类具有行为:也可以说是具有相 同特征和行为的一组对象的集合. 对象:对象是一个个你能看得见,摸得着的实体, ...
- java三层模型与三层架构
http://zhidao.baidu.com/question/316273675.html?qbl=relate_question_4 持久层用来固化数据,如常说的DAO层,操作数据库将数据入库业 ...
- 如何写一个网页标题title的闪动提示
通过网页title来提示用户有新消息这个功能很常见,比如现在的微博,还有一些邮箱,这个功能都很常见.如何实现则个功能呢? 思路是:通过ajax访问后台,若有新消息,则将网页的title替换为 提示信息 ...
- Linux下的管道命令有这些:
Linux下的管道命令有这些: 选取命令:cat grep 排序命令:sort wc uniq 双向重定向:tee 字符转换命令: tr, col, join, paste, expand 切割命令: ...