JavaScript 語言採用的是單線程模型,也就是說,全部任務只能在一個線程上完成,一次只能作一件事。前面的任務沒作完,後面的任務只能等着。隨着電腦計算能力的加強,尤爲是多核 CPU 的出現,單線程帶來很大的不便,沒法充分發揮計算機的計算能力。
Web Worker 的做用,就是爲 JavaScript 創造多線程環境,容許主線程建立 Worker 線程,將一些任務分配給後者運行。在主線程運行的同時,Worker 線程在後臺運行,二者互不干擾。等到 Worker 線程完成計算任務,再把結果返回給主線程。這樣的好處是,一些計算密集型或高延遲的任務,被 Worker 線程負擔了,主線程(一般負責 UI 交互)就會很流暢,不會被阻塞或拖慢。html
基本用法
主線程
// new Worker(url) url是跟主線程同源的worker線程文件,不能跨域 var worker = new Worker('test.worker.js'); worker.onmessage = function (event) { let data = event.data; alert(JSON.stringify(data)); } // 向Worker線程傳遞數據 worker.postMessage({ cmd: 'time' });
Worker線程
self.onmessage = function (event) { let param = event.data; switch (param.cmd) { case 'time': self.postMessage({ cmd: 'time', data: new Date() }) break; } }
Demo:
簡單Demogit
參考:
Web Worker 使用教程
js Worker 線程web