2013-07-30 25 views
6

我在寫一個使用JavaScript,HTML5和AngularJS的應用程序。它只需要在相當新的瀏覽器上工作(例如,IE10,而不是IE9)。如何在AngularJS應用程序中執行計算密集型任務?

在應用程序的多個位置,將會有計算密集型任務,如XML解析,base64解碼;這些可能涉及相當大的數據(幾MB肯定是一種可能性)。

如果我只是打電話給atob()DOMParser.parseFromString()之類的東西,我會在幾秒鐘甚至幾分鐘內收到一個無響應的瀏覽器。這顯然是用戶不能接受的。

我已經使用Angular的Q服務來使訪問外部Web服務異步,因此避免在等待響應時掛斷瀏覽器。但是這樣的操作已經有了一個異步API。

這些計算密切的任務,它們沒有自己的異步API呢?

我可以將這些任務中的一部分分開,鏈接承諾。這有幫助嗎?瀏覽器消息隊列在每個任務結束時是否旋轉?

我看到「Web Workers」的存在,它似乎提供了適當的多線程。但是他們似乎沒有能力將工作對象傳遞給工作線程。當然,對於像我這樣的人來說,似乎來自C#.Net!例如,我想將Angular服務(內置的和我自己的)注入線程上的任務。而且我不想在線程之間複製海量數據。

其他人是否正在實現響應客戶端Web應用程序,其中包括嚴重的計算?如果是這樣,他們用什麼來實現這一目標?

+0

至於注入服務,工作者線程可以使用全局函數importScripts('script.js') - 以防萬一您錯過了它。可悲的是,複製數據的問題沒有解決辦法。 –

+1

我一直在試驗,我不能讓Angular本身加載一個工人(它需要窗口和文檔),所以我想我不能使用任何Angular? – PeteAC

回答

3

這聽起來像你正在尋找Parallel.js library

下面是從他們的網站的庫的簡短描述:

「Parallel.js是在Javascript多核處理一個小庫它的建立需要不斷成熟的基於web的充分利用工人API「。

我目前還沒有意識到在Angular中使用Parallel.js的任何特定示例,但是我相信將它作爲Angular服務集成並不會太困難。

相關問題