Web Worker javascript多線程編程(一)中提到有兩種Web Worker:專用線程dedicated web worker,以及共享線程shared web worker。不過主要講了專用線程dedicated web worker,并未提及共享線程shared web worker。那么這一篇文章繼上一篇講講共享線程shared web worker。
shared web worker:運行的是更為普遍性的代碼,可以為多個頁面服務。它可以被與之相關聯(lián)的多個頁面訪問,只有當所有關聯(lián)的的頁面都關閉的時候,該Shared web worker才會結束。
注意:如果要使共享進程可以連接到多個不同的頁面,這些頁面必須屬于相同的域(相同的協(xié)議,主機以及端口);
如何創(chuàng)建shared web worker
創(chuàng)建shared web worker與創(chuàng)建dedicated web worker方法類似,調(diào)用SharedWorker()
構造函數(shù),指定一個要在 worker 線程內(nèi)運行的腳本的 uri。
下面的代碼展示了如何通過SharedWorker()
構造函數(shù)來創(chuàng)建一個共享進程對象。
var myWorker = new SharedWorker("worker.js");
與dedicated web worker不同的是,shared web worker訪問worker通過sharedworker.port屬性創(chuàng)建了一個messageport對象,該對象可以用來進行通信和對共享進程進行控制。當使用addEventListener監(jiān)聽message事件時,端口需要手動啟動,利用其start()方法,采用onmessage()則不用。
myWorker.port.start();
端口開啟后,使用port.postmessage()向SharedWorker發(fā)送消息,使用port.onmessage監(jiān)聽事件接收SharedWorker傳遞的消息,代碼演示如下: