js Worker 線程

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

相關文章
相關標籤/搜索