什么是Web Worker?

web worker 是運(yùn)行在后臺(tái)的 JavaScript,不占用瀏覽器自身線程,獨(dú)立于其他腳本,可以提高應(yīng)用的總體性能,并且提升用戶體驗(yàn)。

一般來說Javascript和UI頁(yè)面會(huì)共用一個(gè)線程,在HTML頁(yè)面中執(zhí)行js腳本時(shí),頁(yè)面的狀態(tài)是不可響應(yīng)的,直到腳本已完成。而這段代碼可以交給Web Worker在后臺(tái)運(yùn)行,那么頁(yè)面在Javascript運(yùn)行期間依然可以響應(yīng)用戶操作。后臺(tái)會(huì)啟動(dòng)一個(gè)worker線程來執(zhí)行這段代碼,用戶可以創(chuàng)建多個(gè)worker線程。

有兩種 Web Worker

Web workers可分為兩種類型:專用線程dedicated web worker,以及共享線程shared web worker。 Dedicated web worker隨當(dāng)前頁(yè)面的關(guān)閉而結(jié)束;這意味著Dedicated web worker只能被創(chuàng)建它的頁(yè)面訪問。與之相對(duì)應(yīng)的Shared web worker可以被多個(gè)頁(yè)面訪問。在Javascript代碼中,“Work”類型代表Dedicated web worker,而“SharedWorker”類型代表Shared web worker。

在絕大多數(shù)情況下,使用Dedicated web worker就足夠了,因?yàn)橐话銇碚f在web worker中運(yùn)行的代碼是專為當(dāng)前頁(yè)面服務(wù)的。而在一些特定情況下,web worker可能運(yùn)行的是更為普遍性的代碼,可以為多個(gè)頁(yè)面服務(wù)。在這種情況下,我們會(huì)創(chuàng)建一個(gè)共享線程的Shared web worker,它可以被與之相關(guān)聯(lián)的多個(gè)頁(yè)面訪問,只有當(dāng)所有關(guān)聯(lián)的的頁(yè)面都關(guān)閉的時(shí)候,該Shared web worker才會(huì)結(jié)束。相對(duì)Dedicated web worker,shared web worker稍微復(fù)雜些。

new Worker()對(duì)象代表Dedicated Web Worker,以下示例代碼都為Dedicated Web Worker。

如何創(chuàng)建 Web Worker?