由於js是單線程的,所以H5添加了這個叫做webWorker的概念,允許js創建多個線程,但是子線程完全受主線程控制,且不能操作DOM,從而來處理一些比較耗時的操作。
那么如何創建一個子線程呢?通過這么一個構造函數var worker = new Worker('worker.js');
*常用的一些API:
1、postMessage():用來在主線程和子線程間傳遞數據。
2、terminate():終止子線程,無法再調用,除非另外重創。(worker.terminate();)
3、message:消息發送時觸發,通過事件的data屬性獲得傳遞的數據。
4、error:當出錯時觸發,通過事件的message屬性獲得錯誤信息。
下面給出一個Demo:
先是主線程界面:
接着是worker.js界面:
我們再來看下輸出結果:
上面的這個demo其實已經能大致把一個webWorker的使用表達清楚了,額外補充下:
1、可以在worker中可以通過importScripts(url)加載另外的腳本文件
2、可以使用定時器的方法,但其余的DOM操作不支持
3、可以使用AJAX發起請求
4、可以訪問navigator的部分屬性
5、不能跨域加載js文件
6、各個瀏覽器的差異性,例:Firefox中支持worker中再建worker,Chrome不支持