JS异步那些事 一 (基础知识)
JS异步那些事 二 (分布式事宜)
JS异步那些事 三 (Promise)
JS异步那些事 四(HTML 5 Web Workers)
JS异步那些事 五 (异步剧本加载)
什么是 Web Worker?
当在 HTML 页面中实行剧本时,页面的状况是不可相应的,直到剧本已完成。
web worker 是运转在背景的 JavaScript,独立于其他剧本,不会影响页面的机能。您能够继承做任何情愿做的事变:点击、拔取内容等等,而此时 web worker 在背景运转。
建立 web worker 文件
如今,让我们在一个外部 JavaScript 中建立我们的 web worker。
在这里,我们建立了计数剧本。该剧本存储于 “demo_workers.js” 文件中:
var i=0;
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
以上代码中主要的部份是 postMessage() 要领 – 它用于向 HTML 页面传回一段音讯。
诠释:web worker 一般不用于云云简朴的剧本,而是用于更消耗 CPU 资本的使命。
建立 Web Worker 对象
我们已有了 web worker 文件,如今我们需要从 HTML 页面调用它。
下面的代码检测是不是存在 worker,假如不存在,- 它会建立一个新的 web worker 对象,然后运转 “demo_workers.js” 中的代码:
if(typeof(w)=="undefined")
{
w=new Worker("demo_workers.js");
}
然后我们就能够从 web worker 发作和吸收音讯了。
向 web worker 增加一个 “onmessage” 事宜监听器:
w.onmessage=function(event){
document.getElementById("result").innerHTML=event.data;
};
当 web worker 通报音讯时,会实行事宜监听器中的代码。event.data 中存有来自 event.data 的数据。
停止 Web Worker
当我们建立 web worker 对象后,它会继承监听音讯(纵然在外部剧本完成以后)直到其被停止为止。
如需停止 web worker,并开释浏览器/计算机资本,请使用 terminate() 要领:
w.terminate();
完全的 Web Worker 实例代码
我们已看到了 .js 文件中的 Worker 代码。下面是 HTML 页面的代码:
<!DOCTYPE html>
<html>
<body>
<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button>
<button onclick="stopWorker()">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>
本文参考w3cschool中HTML 5 Web worker的诠释