HTML5 Web Workers簡(jiǎn)介
—個(gè)worker是一個(gè)使用構(gòu)造函數(shù)(如Worker())來(lái)創(chuàng)建的對(duì)象,在一個(gè)命名的JS文件里面運(yùn)行,這個(gè)文件包含了在worker線程中運(yùn)行的代碼。Workers不同于現(xiàn)在的window,是在另一個(gè)全局上下文中運(yùn)行的。在專(zhuān)用的Workers例子中,是由DedicatedWorkerGlobalScope對(duì)象代表這個(gè)上下文環(huán)境。標(biāo)準(zhǔn)Workers是由單個(gè)腳本使用的,共享Workers使用的是SharedWorkerGlobalScope。
在worker線程里面,可以運(yùn)行任何你喜歡的代碼,當(dāng)然也有一些例外。例如,不能直接操作worker里面的DOM,也不能使用window對(duì)象的一些默認(rèn)方法和屬性。但是,可以使用window下許多可用的項(xiàng)目,包括WebSockets、類(lèi)似IndexedDB和Firefox OS獨(dú)有的Data Store API這樣的數(shù)據(jù)存儲(chǔ)機(jī)制。
在HTML5中,創(chuàng)建后臺(tái)線程的步驟十分簡(jiǎn)單,只需要在Worker類(lèi)的構(gòu)造器中,將需要在后臺(tái)線程中執(zhí)行主腳本文件的URL地址作為參數(shù),然后創(chuàng)建Worker對(duì)象就可以了,代碼如下:
var Worker = Worket("Worker.js");
在后臺(tái)線程中是不能訪問(wèn)頁(yè)面或窗口對(duì)象的。如果在后臺(tái)線程的腳本文件中使用window對(duì)象或 document對(duì)象,則會(huì)引起錯(cuò)誤的發(fā)生。
使用Worker對(duì)象的Message方?jīng)i來(lái)對(duì)后臺(tái)線程發(fā)送消息,如下面代碼所示:
Worker.postMessage(message);
在上述代碼中,發(fā)送的消息是文本數(shù)據(jù),但也可以是任何JavaScript對(duì)象(需要通過(guò)JSON對(duì)象的stingoify方法將其轉(zhuǎn)換成文本數(shù)據(jù))。
另外,可以通過(guò)獲取Worker對(duì)象的onmessage事件句柄及Worker對(duì)象的postMessage方法,在后臺(tái)線程內(nèi)部進(jìn)行消息的接收和發(fā)送。
點(diǎn)擊加載更多評(píng)論>>