HTML5之 WebWorkers
为了进行后台计算提供的完全隔离计算方式
不可访问 DOM APIs
不可访问 window object
不可访问 document object
强隔离保证并行计算结果无误(无锁机制)
---- 启动
定义Worker对象
var w = new Worker("calc.js");
Worker会占用比非Worker模式更多内存
硬件好,效率高
---- 通信
Message事件用于和调用方通信
addEventListener('message',function(evt){});
postMessage()用于向Worker发消息
w.postMessage(imgData);
数据会被格式化成为JSON格式
每次发送都是源对象的copy,对象大,性能降低明显
---- Worker 可访问接口
SetTimeout()/clearTimeout()
setInterval()/clearInterval()
importScripts()引入其它JS文件
可以读取url
可以发送xmlhttprequest
Shared worker 共享数据
---- 算闰年的示例
1. HTML 设计
<form name="stepForm">
选择速度:
<select name="step">
<option value="1">1 sec</option>
<option selected="" value="10">10 sec</option>
<option value="60">1 min</option>
<option value="120">2 min</option>
</select> <p>Jahr-Monat: <span id="y">0</span></p>
<input id="start" type="button" onclick="startCalc();" value="Start">
<input id="stop" type="button" onclick="stopCalc();" value="Stop">
<pre id="cnt"></pre>
</form>
2. JS的 设计
window.onload = function() {
var opts = document.forms.stepForm.step.options;
// 开始事件
startCalc = function() {
var step = opts[opts.selectedIndex].value;
var w = new Worker('date_worker.js'); // 创建 Worker 对象
// 发数据到woker
w.postMessage(step);
$("start").disabled = 'disabled';
// 返回数据触发事件
w.onmessage = function(evt) {
if (evt.data.substr(0,2) == "y ") {
$("y").innerHTML = evt.data.substr(2);
} else {
$("cnt").innerHTML += "Schaltjahr: "+evt.data+"\n";
}
}
// 服务停止事件
stopCalc = function() {
w.terminate(); // 中断连接
$("start").removeAttribute("disabled");
}
}
}
3. date_worker.js 设计
addEventListener('message', function(evt) {
var today = new Date();
var oldMonth = -1;
// evt.data 即传进来的参数
for (var i=0; i<today; i+=Number(evt.data)*1000) {
var d = new Date(i);
if (d.getDate() == 29 && d.getMonth() == 1
&& d.getHours() == 12 && d.getMinutes() == 0) {
// 返回数据
postMessage(d.toLocaleString());
}
if (d.getMonth() != oldMonth) {
// 返回数据
postMessage("y "+d.getFullYear()+"-" +(d.getMonth()+1));
oldMonth = d.getMonth();
}
}
}, false);
HTML5之 WebWorkers的更多相关文章
- html5 WebWorkers 防止浏览器假死
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...
- html5 webwork
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...
- HTML5触屏版多线程渲染模板技术分享
前言: 了解js编译原理的屌丝们都知道,js是单线程的,想当年各路神仙为了实现js的多线程,为了解决innerHTML输出大段HTML卡页面的顽疾,纷纷设计了诸如假冒的“多线程“实现,我自己也在写开源 ...
- HTML5攻防向量
From:HTML 5 Morden Day Attack And Defense Vectors Autor:Rafay Baloch 摘要 根据Powermapper出版的统计,他们分析的Web页 ...
- HTML5系列四(特征检测、Modernizr.js的相关介绍)
Modernizr:一个HTML5特征检测库 Modernizr帮助我们检测浏览器是否实现了某个特征,如果实现了那么开发人员就可以充分利用这个特征做一些工作 Modernizr是自动运行的,无须调用诸 ...
- 使用Modernizr探测HTML5/CSS3新特性(转载)
转载地址:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.h ...
- 转:HTML5标准与性能之四:asm.js
HTML5标准与性能之四:asm.js Cong Liu (Intel) 于 星期五, 24/05/2013 - 01:13 提交 之前的几篇文章分别介绍了WebWorkers.Typed Array ...
- HTML5 文件操作API
简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面. ...
- HTML5/CSS3(PrefixFree.js) 3D文字特效
之前在园子里看到一个HTML5/CSS3的文字特效(这里),觉得挺好玩的所以小小的研究了下,不过发现代码都是针对webkit以及FF的所以IE跪了. Runjs 我将示例中的代码进行了精简,后来发现C ...
随机推荐
- HDFS原理讲解
简介 本文是笔者在学习HDFS的时候的学习笔记整理, 将HDFS的核心功能的原理都整理在这里了. [广告] 如果你喜欢本博客,请点此查看本博客所有文章:http://www.cnblogs.com/x ...
- JavaScript eval() Function
Evaluate/Execute JavaScript code/expressions: Example var x = 10;var y = 20;var a = eval("x * y ...
- Oracle_集合
游标遍历select语句 set serveroutput on; declare type sp_test1_cursor is ref cursor; test1_cursor sp_test1_ ...
- spring源码分析之spring-jms模块详解
0 概述 spring提供了一个jms集成框架,这个框架如spring 集成jdbc api一样,简化了jms api的使用. jms可以简单的分成两个功能区,消息的生产和消息的消费.JmsTempl ...
- 面试常考的常用数据结构与算法(zz)
数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易.在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结 ...
- 关于“学习Linux用什么系统”的解答
首先,阐述一下,我个人的观点——这个问题我曾经也想了很久了,这绝不是长篇大论后就是简单一句,适合你的就是最好的.其实,很多人看到这一句,心里已经有成千上万个奔腾了(至少我当时是这样的),为什么?因为我 ...
- CCScale9Sprite的使用
#include "cocos-ext.h" USING_NS_CC_EXT; //框中需要显示的label CCLabelTTF *label = CCLableTTF::cre ...
- Android(java)学习笔记83:finally关键字的作用
package cn.itcast_07; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...
- Log4Net之初步了解
原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/log4net%E4%B9%8B%E5%88%9D%E6 ...
- linux-查看磁盘硬盘空间
du :查看文件和目录的磁盘使用情况 用法 du [选项][文件] -s:仅显示总计只列出最后加总的值 -h:以K/M/G为单位提高信息的可读性 du -sh文件名 显示文件的大小 du -sh文件 ...