我的Firefox擴展正在解析大塊數據。我通常會使用WebWorkers來做到這一點,但是在XPCOM中,我認爲這不是一個選項。 ChromeWorker,https://developer.mozilla.org/en-US/docs/Web/API/ChromeWorker,似乎已經過時,「在新項目中不鼓勵」。使用來自Firefox擴展的Web Workers的XPCOM
是否有任何選項可以在Firefox擴展中使用工作人員?
我的Firefox擴展正在解析大塊數據。我通常會使用WebWorkers來做到這一點,但是在XPCOM中,我認爲這不是一個選項。 ChromeWorker,https://developer.mozilla.org/en-US/docs/Web/API/ChromeWorker,似乎已經過時,「在新項目中不鼓勵」。使用來自Firefox擴展的Web Workers的XPCOM
是否有任何選項可以在Firefox擴展中使用工作人員?
短版本:不,您不能從其他線程訪問XPCOM。但這並不意味着你不能使用鉻工作人員。
長版本:Firefox用於允許從其他線程訪問XPCOM,例如,通過ChromeWorker
。這導致了各種各樣的問題,如奇怪的崩潰或只是普通的不一致的行爲。最終,Mozilla決定支持多線程XPCOM訪問過於複雜且容易出錯,同時記錄了它的侷限性並阻止了人們的自我攻擊。
使用當前的Firefox版本,從ChromeWorker
訪問XPCOM將不再可能。然而,ChromeWorker
本身並不被棄用,儘管MDN評論可能會被輕易誤解爲一般棄用聲明。這個想法是,您將使用ChromeWorker
與js-ctypes結合使用,這將允許您在另一個線程上使用本地庫(由操作系統提供的庫,包括在Firefox中的庫,如NSS和隨擴展一起分發的庫)。
根據你想達到什麼,這可能適合你。例如,如果您需要XPCOM進行文件訪問,那麼您甚至不需要直接使用js-ctypes - OS.File API將爲您做到這一點。但是,XPCOM訪問僅限於主線程。
謝謝你的回答。該應用程序通過使用string.charCodeAt()獲取每個字符來獲取css文件並解析它們。這可能是昂貴的。想要從主線程中獲取它,不確定在這種情況下OS.file是否可以提供幫助。謝謝。 – Mircea
@Mircea:如果CSS文件在磁盤上 - 是的,當然。如果CSS文件位於Web上,那麼您仍然必須在主線程上獲取它(例如,通過異步XMLHttpRequest),然後將數據傳遞給工作人員。 –
假設我已經有一個Javascript對象/字符串中的CSS內容,我可以使用OS.File來傳遞它的內容,並解析它與我的js解析器關閉主線程嗎?對不起,我對此有些困惑。 – Mircea