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