標籤:頁面 nat 接收 term targe 一個 點擊 set document
什麼是 web worker?
我們一直強調JavaScript是單線程的,但是web worker的出現使得JavaScript可以在多線程上跑,只是web worker本身適合用於一些複雜的、耗費cpu的運算,不能操作window、document、parent對象,所以說本質上的JavaScript還是單線程的。
這裡,我們僅僅舉一個簡單的例子,看看web worker是怎麼啟動並執行,畢竟是html5的規範,目前瀏覽器的支援還不是很好。
web worker就是運行在背景JavaScript,獨立於其他指令碼,不會影響頁面的效能。您還可以做任意想做的事情,不會影響點擊等操作。
為什麼需要web worker?
對於耗時而不操作DOM的JavaScript,我們就可以使用web worker,增強效能。
web worker有什麼要注意的地方?
- 不是所有的瀏覽器都支援,使用前要檢查瀏覽器是否支援。
- web worker運行於外部檔案中,所以他們無法訪問下面的JavaScript對象。
- 理解好 worker,worker在電腦領域通常被翻譯為線程或者是進程。而這裡的worker意義也是如此。 我們需要將之正確對待。
web worker執行個體
建立worker.js外部檔案:
var i = 0; setInterval(function () { postMessage(i++);}, 1000);
html檔案如下:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title></head><body> <p>計數:<span id="result"></span></p> <button onclick="start()">web worker開始工作</button> <button onclick="stop()">web worker結束工作</button> <script> var w; function start() { if (typeof Worker != ‘undefined‘) { w = new Worker(‘worker.js‘); w.onmessage = function (event) { document.getElementById(‘result‘).innerHTML = event.data; } } else { document.getElementById(‘result‘).innerHTML = ‘您的瀏覽器不支援web worker‘; } } function stop() { w.terminate(); w = undefined; } </script></body></html>
即首先判斷:是否支援Worker建構函式,如果支援,就傳遞一個js檔案建立這個檔案的執行個體,然後就可以調用 message 事件,接收從 worker.js 中獲得的資料。
注意: 必須在伺服器上測試,否則會有跨域問題。
最終,我就可以看到效果了。
代碼地址: https://github.com/zzw918/cross-origin/tree/master/webWorker
web worker原理