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