- 第1节:HTML5 浏览器支持
- 第2节:HTML5 新元素
- 第3节:HTML5 Canvas
- 第4节:HTML5 SVG
- 第5节:HTML5 MathML
- 第6节:HTML5 拖放
- 第7节:HTML5 地理定位
- 第8节:HTML5 视频(Video)
- 第9节:HTML5 音频(Audio)
- 第10节:HTML5 Input 类型
- 第11节:HTML5 表单元素
- 第12节:HTML5 表单属性
- 第13节:HTML5 语义元素
- 第14节:HTML5 Web 存储
- 第15节:HTML5 Web SQL
- 第16节:HTML5 应用程序缓存
- 第17节:HTML5 Web Workers
- 第18节:HTML5 SSE
- 第19节:HTML5 WebSocket
- 第20节:HTML5 代码规范
- 第21节:HTML5 <!DOCTYPE> 标签
- 第22节:HTML5 <a> 标签
- 第23节:HTML5 <area> 标签
- 第24节:HTML5 <abbr> 标签
- 第25节:HTML5 <applet> 标签
- 第26节:HTML5 <article>标签
- 第27节:HTML5 <aside> 标签
- 第28节:HTML5 <address> 标签
- 第29节:HTML <audio> 标签
- 第30节:HTML5 <b> 标签
- 第31节:HTML5 <base> 标签
- 第32节:HTML5 <blockquote> 标签
- 第33节:HTML5 <br />标签
- 第34节:HTML5 <button> 标签
- 第35节:HTML5 <bdi> 标签
- 第36节:HTML5 <bdo> 标签
- 第37节:HTML5 <body> 标签
- 第38节:HTML5 <canvas> 标签
- 第39节:HTML5 <col> 标签
- 第40节:HTML5 <colgroup> 标签
- 第41节:HTML5 <caption> 标签
- 第42节:HTML5 <em> <strong> <dfn> <code> <samp> <kbd> <var> <cite> 标签
- 第43节:HTML5 <ul> 标签
- 第44节:HTML5 <dl> 标签
- 第45节:HTML5 <del> 标签
- 第46节:HTML5 <dd> 标签
- 第47节:HTML5 <details> 标签
- 第48节:HTML5 <div> 标签
- 第49节:HTML5 <embed> 标签
- 第50节:HTML5 <figcaption> 标签
- 第51节:HTML5 <form> 标签
- 第52节:HTML5 <figure> 标签
- 第53节:HTML5 <footer> 标签
- 第54节:HTML5 <fieldset> 标签
- 第55节:HTML5 <hgroup> 标签
- 第56节:HTML5 <hr> 标签
- 第57节:HTML5 <h1> 至 <h6> 标签
- 第58节:HTML5 <header> 标签
- 第59节:HTML5 <html> 标签
- 第60节:HTML5 <head> 标签
- 第61节:HTML5 <i> 标签
- 第62节:HTML5 <iframe> 标签
- 第63节:HTML5 <input> 标签
- 第64节:HTML5 <img> 标签
- 第65节:HTML5 <ins> 标签
- 第66节:HTML5 <link> 标签
- 第67节:HTML5 <li> 标签
- 第68节:HTML5 <legend> 标签
- 第69节:HTML5 <label> 标签
- 第70节:HTML5 <map> 标签
- 第71节:HTML5 <meta> 标签
- 第72节:HTML5 <menu> 标签
- 第73节:HTML5 <meter> 标签
- 第74节:HTML5 <mark> 标签
- 第75节:HTML5 <nav> 标签
- 第76节:HTML5 <noscript> 标签
- 第77节:HTML5 <ol> 标签
- 第78节:HTML5 <object> 标签
- 第79节:HTML5 <option> 标签
- 第80节:HTML5 <output> 标签
- 第81节:HTML5 <optgroup> 标签
- 第82节:HTML5 <p> 标签
- 第83节:HTML5 <pre> 标签
- 第84节:HTML5 <param> 标签
- 第85节:HTML5 <progress> 标签
- 第86节:HTML5 <q> 标签
- 第87节:HTML5 <rp> 标签
- 第88节:HTML5 <rt> 标签
- 第89节:HTML5 <ruby> 标签
- 第90节:HTML5 <s> 标签
- 第91节:HTML5 <sub> 和 <sup> 标签
- 第92节:HTML5 <span> 标签
- 第93节:HTML5 <small> 标签
- 第94节:HTML5 <style> 标签
- 第95节:HTML5 <strike> 标签
- 第96节:HTML5 <select> 标签
- 第97节:HTML5 <source> 标签
- 第98节:HTML5 <section> 标签
- 第99节:HTML5 <summary> 标签
- 第100节:HTML5 <td> 标签
- 第101节:HTML5 <th> 标签
- 第102节:HTML5 <tt> 标签
- 第103节:HTML5 <tr> 标签
- 第104节:HTML5 <table> 标签
- 第105节:HTML5 <title> 标签
- 第106节:HTML5 <tfoot> 标签
- 第107节:HTML5 <thead> 标签
- 第108节:HTML5 <time> 标签
- 第109节:HTML5 <tbody> 标签
- 第110节:HTML5 <textarea> 标签
HTML5 Web Workers
HTML5 Web Workers
web worker 是运行在后台的 JavaScript,不会影响页面的性能,更好的解释是,你可以使用web worker提供的一种简单的方法来为web内容在后台线程中运行脚本,这些线程在执行任务的过程中并不会干扰用户界面!
什么是 Web Worker?
当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。
web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。
浏览器支持
Internet Explorer 10, Firefox, Chrome, Safari 和 Opera 都支持Web workers.
HTML5 Web Workers 实例
下面的例子创建了一个简单的 web worker,在后台计数:
实例
demo_workers.js 文件代码:
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
检测浏览器是否支持 Web Worker
在创建 web worker 之前,请检测用户的浏览器是否支持它:
{
// 是的! Web worker 支持!
// 一些代码.....
}
else
{
// //抱歉! Web Worker 不支持
}
这步的检测非常重要!你必须先检测才能保证接下来可以顺利操作 web worker!
创建 web worker 文件
现在,让我们在一个外部 JavaScript 中创建我们的 web worker。
在这里,我们创建了计数脚本。该脚本存储于 "demo_workers.js" 文件中:
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
以上代码中重要的部分是 postMessage() 方法 - 它用于向 HTML 页面传回一段消息。
注意: web worker 通常不用于如此简单的脚本,而是用于更耗费 CPU 资源的任务。
创建 Web Worker 对象
我们已经有了 web worker 文件,现在我们需要从 HTML 页面调用它。/p>
下面的代码检测是否存在 worker,如果不存在,- 它会创建一个新的 web worker 对象,然后运行 "demo_workers.js" 中的代码:
{
w=new Worker("demo_workers.js");
}
然后我们就可以从 web worker 发送和接收消息了。
向 web worker 添加一个 "onmessage" 事件监听器:
document.getElementById("result").innerHTML=event.data;
};
<p当 web worker 传递消息时,会执行事件监听器中的代码。event.data 中存有来自 event.data 的数据。
终止 Web Worker
当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。
如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:
完整的 Web Worker 实例代码
我们已经看到了 .js 文件中的 Worker 代码。下面是 HTML 页面的代码:
实例
<html>
<body>
<p>Count numbers: <output></output></p>
<button>Start Worker</button>
<button>Stop Worker</button>
<br><br>
<script>
var w;
function startWorker()
{
if(typeof(Worker)!=="undefined")
{
if(typeof(w)=="undefined")
{
w=new Worker("demo_workers.js");
}
w.onmessage = function (event) {
document.getElementById("result").innerHTML=event.data;
};
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support Web Workers...";
}
}
function stopWorker()
{
w.terminate();
}
</script>
</body>
</html>
Web Workers 和 DOM
由于 web worker 位于外部文件中,它们无法访问下例 JavaScript 对象:
- window 对象
- document 对象
- parent 对象
相关教程
javascript教程