2013-07-30 6 views
6

Piszę aplikację za pomocą JavaScript, HTML5 i AngularJS. Musi działać tylko w całkiem nowych przeglądarkach (na przykład IE10, ale nie w IE9).Jak wykonywać intensywne obliczenia zadań w aplikacji AngularJS?

W kilku miejscach aplikacji będą wykonywane zadania wymagające dużej mocy obliczeniowej, takie jak parsowanie XML, dekodowanie base64; mogą one obejmować dość duże dane (kilka MB to z pewnością możliwość).

Jeśli po prostu zadzwonię do rzeczy takich jak atob() lub DOMParser.parseFromString(), otrzymam nieodpowiedzialną przeglądarkę przez kilka sekund lub nawet minut. Jest to wyraźnie nie do przyjęcia dla użytkownika.

Użyłem usługi Q w Anglerze, aby uzyskać dostęp do zewnętrznej usługi sieciowej asynchronicznej, a tym samym uniknąć zawieszenia przeglądarki podczas oczekiwania na odpowiedź. Ale takie operacje już mają asynchroniczny interfejs API.

Co z tymi zadaniami intencyjnymi, które nie mają własnego asynchronicznego interfejsu API?

Potrafię podzielić niektóre z tych zadań, wiążąc obietnice. Czy to w ogóle pomaga? Czy kolejka komunikatów przeglądarki jest wirowana na końcu każdego zadania?

Widzę istnienie "Web Workers", którzy wydają się oferować odpowiednie wielowątkowość. Ale wydają się mieć raczej słabe umiejętności przenoszenia obiektów do/z wątków roboczych. Z pewnością wydaje się, że dla kogoś takiego jak ja pochodzę z C# .Net! Na przykład chciałbym wprowadzić usługi Angular (wbudowane i własne) do zadań na wątkach. I nie chcę również kopiować masywnych danych między wątkami.

Czy inne osoby uzyskują responsywne aplikacje internetowe po stronie klienta, które zawierają poważne obliczenia? Jeśli tak, to czego używają, aby to osiągnąć?

+0

Jeśli chodzi o usługi iniekcyjne, wątek roboczy może korzystać z globalnej funkcji importScripts ("script.js") - na wszelki wypadek. Niestety, nie ma rozwiązania problemu kopiowania danych. –

+1

Eksperymentowałem i nie mogę przekonać sam Angulara do załadowania pracownika (potrzebuje on okna i dokumentu), więc myślę, że nie mogę użyć niczego Angular? – PeteAC

Odpowiedz

3

Wygląda na to, że szukasz Parallel.js library.

Oto krótki opis biblioteki z ich strony internetowej.

„Parallel.js to mała biblioteka dla wielordzeniowych przetwarzania w JavaScript Został on stworzony, aby w pełni wykorzystać stale dojrzewa WEB- API pracowników. "

Nie jestem obecnie świadomy żadnych konkretnych przykładów użycia Parallel.js w Angular, ale jestem pewien, że integracja biblioteki jako usługi Angular nie byłaby zbyt trudna.

Powiązane problemy