2015-07-09 41 views
1

我目前正在使用大量庫的大型Javascript項目。 我想讓這個項目的一部分在單獨的線程上運行。在JavaScript中已經有了一些東西:網絡工作者。在使用Javascript訪問對象時自動調用函數

雖然網絡工作者無法訪問window對象,並且很多庫都使用它。有沒有一種方法可以自動將對窗口對象的調用(在用於Web Worker的庫中)更改爲發送給父線程的消息?

然後,父線程將執行工作人員需要的操作並將結果發送回工作人員。

有沒有可能這樣做?而且是的,你有什麼想法如何?

謝謝!

+0

嘗試閱讀[Worker.postMessage()](https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage)。 –

+0

我很清楚這個功能,它確定我會用它來執行我想要做的事情。 雖然,我期待的是每次我想訪問'window'對象時如何自動調用這個函數。 – clems4ever

回答

1

恐怕沒有真正的解決方案。你可能需要的是你的工作者中的一個特殊對象,它在每次訪問屬性時都將執行傳遞給調度線程 - 調度線程使用原始窗口對象處理請求。

要做到這一點,您需要某種形式的catch-all存取方法,只要引用屬性就會運行。可悲的是,有在Javascript中沒有這樣的事情,看到這個詳細的討論(尤其是TJ克羅德的答案):(!目前在FF和IE12(去圖支持))Is it possible to implement dynamic getters/setters in JavaScript?

的ECMAScript 6引入了一個名爲Proxy新機制,在技​​術上可以讓你做這些動態屬性查找 - 但我覺得你的想法存在一個更基本的問題:你打算在單線程環境的邊界上將本地調用變成消息。

從工作線程傳遞到工作線程的消息必須是異步的(因爲一個JavaScript「線程」不能被打斷,直到它產生),這意味着即使你設法設置了這樣的代理,它也會將一個通常的同步操作(即一個屬性訪問)有效地轉變爲一個異步操作,這是一個相當大的問題,特別是如果你正在尋找一個替代品來使用一些現有的庫。

+0

好的,謝謝你的回答和鏈接!那麼,我想我將不得不找出另一種方式呢! – clems4ever

相關問題