Web Worker——运行在后台的js脚本,处理复杂事件而不影响页面性能

什么是 Web Worker?

当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成。

web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 在后台运行。

实例:

最简单的用法:

计时器-后台处理返回时间

<!DOCTYPE html>
<html>
<head> 
<meta charset="utf-8"> 
<title>菜鸟教程(runoob.com)</title> 
</head>
<body>

<p>计数: <output id="result"></output></p>
<button onclick="startWorker()">开始工作</button>
<button onclick="stopWorker()">停止工作</button>

<p><strong>注意:</strong> Internet Explorer 9 及更早 IE 版本浏览器不支持 Web Workers.</p>

<script>
var w;

function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(w) == "undefined") {
w = new Worker("demo_workers.js");
}

//onmessage 事件监听器
w.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};
} else {
document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 Web Workers...";
}
}

function stopWorker()
{
w.terminate();
w = undefined;
}
</script>

</body>
</html>

 

外部文件:demo_workers.js

 

var i=0;

function timedCount()
{
    i=i+1;
    postMessage(i);//它用于向 HTML 页面传回一段消息。
    setTimeout("timedCount()",500);
}

timedCount();
 
 

终止 Web Worker

当我们创建 web worker 对象后,它会继续监听消息(即使在外部脚本完成之后)直到其被终止为止。

如需终止 web worker,并释放浏览器/计算机资源,请使用 terminate() 方法:

w.terminate();
posted @ 2017-07-26 17:21  大妖小白  阅读(1160)  评论(0编辑  收藏  举报