Web Worker javascript多線程編程(一)中提到有兩種Web Worker:專(zhuān)用線程dedicated web worker,以及共享線程shared web worker。不過(guò)主要講了專(zhuān)用線程dedicated web worker,并未提及共享線程shared web worker。那么這一篇文章繼上一篇講講共享線程shared web worker。

shared web worker:運(yùn)行的是更為普遍性的代碼,可以為多個(gè)頁(yè)面服務(wù)。它可以被與之相關(guān)聯(lián)的多個(gè)頁(yè)面訪問(wèn),只有當(dāng)所有關(guān)聯(lián)的的頁(yè)面都關(guān)閉的時(shí)候,該Shared web worker才會(huì)結(jié)束。

注意:如果要使共享進(jìn)程可以連接到多個(gè)不同的頁(yè)面,這些頁(yè)面必須屬于相同的域(相同的協(xié)議,主機(jī)以及端口);

如何創(chuàng)建shared web worker
創(chuàng)建shared web worker與創(chuàng)建dedicated web worker方法類(lèi)似,調(diào)用SharedWorker()構(gòu)造函數(shù),指定一個(gè)要在 worker 線程內(nèi)運(yùn)行的腳本的 uri。
下面的代碼展示了如何通過(guò)SharedWorker()構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)共享進(jìn)程對(duì)象。

var myWorker = new SharedWorker("worker.js");

 

與dedicated web worker不同的是,shared web worker訪問(wèn)worker通過(guò)sharedworker.port屬性創(chuàng)建了一個(gè)messageport對(duì)象,該對(duì)象可以用來(lái)進(jìn)行通信和對(duì)共享進(jìn)程進(jìn)行控制。當(dāng)使用addEventListener監(jiān)聽(tīng)message事件時(shí),端口需要手動(dòng)啟動(dòng),利用其start()方法,采用onmessage()則不用。

 

myWorker.port.start();

 

端口開(kāi)啟后,使用port.postmessage()向SharedWorker發(fā)送消息,使用port.onmessage監(jiān)聽(tīng)事件接收SharedWorker傳遞的消息,代碼演示如下:

網(wǎng)友評(píng)論