專職工人和共享工人

專職工人

專用 Web 工作者只能通過呼叫它的指令碼訪問。

主要應用:

var worker = new Worker('worker.js');
worker.addEventListener('message', function(msg) {
    console.log('Result from the worker:', msg.data);
});
worker.postMessage([2,3]);

worker.js:

self.addEventListener('message', function(msg) {
    console.log('Worker received arguments:', msg.data);
    self.postMessage(msg.data[0] + msg.data[1]);
});

共享工人

共享工作者可以通過多個指令碼訪問 - 即使它們被不同的視窗,iframe 甚至工作人員訪問。

建立共享工作者與建立專用工作者非常相似,但是不是主執行緒和工作執行緒之間的直接通訊,而是必須通過埠物件進行通訊,即顯式埠必須開啟,以便多個指令碼可以使用它與共享工作者進行通訊。 (請注意,專職工作人員隱含地這樣做)

主要應用

var myWorker = new SharedWorker('worker.js');
myWorker.port.start();  // open the port connection

myWorker.port.postMessage([2,3]);

worker.js

self.port.start(); open the port connection to enable two-way communication

self.onconnect = function(e) {
    var port = e.ports[0];  // get the port

    port.onmessage = function(e) {
        console.log('Worker revceived arguemnts:', e.data);
        port.postMessage(e.data[0] + e.data[1]);
    }
}

請注意,在工作執行緒中設定此訊息處理程式也會隱式地將埠連線開啟回父執行緒,因此實際上不需要呼叫 port.start(),如上所述。