为了进行后台计算提供的完全隔离计算方式
不可访问 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的更多相关文章

  1. html5 WebWorkers 防止浏览器假死

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...

  2. html5 webwork

    在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...

  3. HTML5触屏版多线程渲染模板技术分享

    前言: 了解js编译原理的屌丝们都知道,js是单线程的,想当年各路神仙为了实现js的多线程,为了解决innerHTML输出大段HTML卡页面的顽疾,纷纷设计了诸如假冒的“多线程“实现,我自己也在写开源 ...

  4. HTML5攻防向量

    From:HTML 5 Morden Day Attack And Defense Vectors Autor:Rafay Baloch 摘要 根据Powermapper出版的统计,他们分析的Web页 ...

  5. HTML5系列四(特征检测、Modernizr.js的相关介绍)

    Modernizr:一个HTML5特征检测库 Modernizr帮助我们检测浏览器是否实现了某个特征,如果实现了那么开发人员就可以充分利用这个特征做一些工作 Modernizr是自动运行的,无须调用诸 ...

  6. 使用Modernizr探测HTML5/CSS3新特性(转载)

    转载地址:http://www.cnblogs.com/TomXu/archive/2011/11/18/detecting-html5-css3-features-using-modernizr.h ...

  7. 转:HTML5标准与性能之四:asm.js

    HTML5标准与性能之四:asm.js Cong Liu (Intel) 于 星期五, 24/05/2013 - 01:13 提交 之前的几篇文章分别介绍了WebWorkers.Typed Array ...

  8. HTML5 文件操作API

    简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面. ...

  9. HTML5/CSS3(PrefixFree.js) 3D文字特效

    之前在园子里看到一个HTML5/CSS3的文字特效(这里),觉得挺好玩的所以小小的研究了下,不过发现代码都是针对webkit以及FF的所以IE跪了. Runjs 我将示例中的代码进行了精简,后来发现C ...

随机推荐

  1. 1039. Course List for Student (25)

    题目链接:http://www.patest.cn/contests/pat-a-practise/1039 题目: 1039. Course List for Student (25) 时间限制 2 ...

  2. oc-05-对象的创建

    // 11-[掌握]创建一个对象并访问成员变量 #import <Foundation/Foundation.h> //声明 @interface Person : NSObject//类 ...

  3. MySQL 灵异事件一则 -- desc报语法错误

    今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错 ...

  4. Ruby on Rails Tutorial 第五章 完善布局

    本章目标:局部视图.Rails路由.Asset Pipeline.Sass1.Bootstrap是Twitter开发的开源Web设计框架mockup是网页构思图,在web领域经常称之为“线框图”,用于 ...

  5. Lua调用自定义C++类

    弄了一天终于会Lua调用自定义C++类.不容易啊. 我的电脑是64位的,装了64的Python不行,装了32位的就可以了,靠!下面是报错信息 python pyyaml Cheetah全都是装32位的 ...

  6. php引入公用部分html出现了一行空白(原创)

    在导入公用部分html(客服信息)时,莫名其妙出现了一行空白,样式,html均无问题 后来才发现是html多了一行空白 <div class="ad-module-item3 fn-m ...

  7. CSS skills: 4) goto page head script

    //返回顶部 $(document).on('click', '.backTop', function (e) { $('html, body').animate({scrollTop: 0}, 50 ...

  8. IE Firefox Safari 下 通过Div“隐藏”设置Accesskey的submit input

    实现效果: 进入页面后 通过快捷键  如Alt+C 调用相关的隐藏按钮 实现功能操作 正常情况下 设置 button => input type="submit" acces ...

  9. PowerShell 解锁使用浏览器下载的文件

    1 dir *.* -Recurse | Unblock-File

  10. C#.net拖拽实现获得文件路径

    思路: 通过DragEnter事件获得被拖入窗口的“信息”(可以是若干文件,一些文字等等),  在DragDrop事件中对“信息”进行解析.        窗体的AllowDrop属性必须设置成tru ...