W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
通過(guò)Web Workers,可以實(shí)現(xiàn)用操作系統(tǒng)級(jí)別的線程來(lái)跑JavaScript
可以在Electron的Web Workers里使用Node.js的特性。要用的話,需把webPreferences
中的nodeIntegrationInWorker
選項(xiàng)設(shè)置為true
const win = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
})
nodeIntegrationInWorker
可以獨(dú)立于nodeIntegration
使用,但sandbox
必須不能設(shè)置為true
注意: 此選項(xiàng)在 SharedWorker
或 Service Worker
中不可用,因?yàn)樯澈胁呗圆患嫒荨?br>
Web Workers支持Node.js的所有內(nèi)置模塊,而且asar
檔案也仍通過(guò)Node.js的API來(lái)讀取。 不過(guò)所有的Electron內(nèi)置模塊不可以用在多線程環(huán)境中。
在Web Workers里可以直接加載任何原生Node.js模塊,但不推薦這樣做。 大多數(shù)現(xiàn)存的原生模塊是在假設(shè)單線程環(huán)境的情況下編寫的,如果把它們用在Web Workers里會(huì)導(dǎo)致崩潰和內(nèi)存損壞。
請(qǐng)注意, 即使原生Node.js模塊如果考慮到了線程安全問(wèn)題, 但在 Web Worker中加載它仍然不安全, 因?yàn)?nbsp;process.dlopen
函數(shù)并沒有考慮線程安全。
現(xiàn)在安全順利地加載原生模塊的唯一辦法,就是確保在Web Workers啟動(dòng)后app不加載原生模塊。
process.dlopen = () => {
throw new Error('Load native module is not safe')
}
const worker = new Worker('script.js')
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: