JS异步那些事 四(HTML 5 Web Workers)

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的诠释

    原文作者:outshineamaze
    原文地址: https://segmentfault.com/a/1190000005081783
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞