前端多線程
web worker 是運(yùn)行在后臺(tái)的 JavaScript遵班,不會(huì)影響頁面的性能。
什么是 Web Worker潮改?
當(dāng)在 HTML 頁面中執(zhí)行腳本時(shí)狭郑,頁面的狀態(tài)是不可響應(yīng)的,直到腳本已完成汇在。
web worker 是運(yùn)行在后臺(tái)的 JavaScript翰萨,獨(dú)立于其他腳本,不會(huì)影響頁面的性能糕殉。您可以繼續(xù)做任何愿意做的事情:點(diǎn)擊亩鬼、選取內(nèi)容等等殖告,而此時(shí) web worker 在后臺(tái)運(yùn)行。
瀏覽器支持
所有主流瀏覽器均支持 web worker雳锋,除了 Internet Explorer黄绩。
實(shí)例
<!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>
demo_workers.js:
var i=0;
function timedCount()
{
i=i+1;
postMessage(i);
setTimeout("timedCount()",500);
}
timedCount();
注意
- 由于 web worker 位于外部文件中,它們無法訪問下例 JavaScript 對象:
window 對象
document 對象
parent 對象 - web worker 通常不用于如此簡單的腳本魄缚,而是用于更耗費(fèi) CPU 資源的任務(wù)宝与。