2013-02-23 26 views
9

Czy istnieje sposób na niszczenie HTML5 WebWorkers w JavaScript?Niszczenie WebWorkers

Oto moja sytuacja: Mam aplikację sieci web, która generuje przyzwoitą liczbę WebWorkers (od 16 do 32), aby zoptymalizować niektóre procesy renderowania. Ten proces działa dobrze kilka pierwszych razy, ale strona umiera, gdy skrypt jest uruchamiany kilka razy (bez ponownego ładowania strony). To ten sam błąd, który pojawia się, gdy próbuję odradzać się dużo (100+) WebWorkers naraz, więc zakładam, że natrafiam na tę samą barierę.

Gdy skrypt działa więcej niż jeden raz, WebWorkers utworzone w pierwszej rundzie nie muszą już istnieć; Nie używam ponownie żadnych obiektów WebWorker. Chciałbym zniszczyć WebWorkers, którzy zostali stworzeni za pierwszym razem, aby przyszłe egzekucje skryptu nie utknęły podczas próby odrodzenia nowych WebWorkers.

Zauważyłem tylko ten problem w przeglądarce Chrome i Firefox; Wygląda na to, że Safari nie ma tego ograniczenia.

Odpowiedz

10

Powinieneś być w stanie wywołać to z okna głównego do natychmiastowego wypowiedzenia pracownikowi:

myWorker.terminate(); 

Zobacz pełną API tutaj: https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

Alternatywnie, można zadzwonić close() od pracownika Sam zobacz : https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers

+0

Dokładnie to, czego szukałem. –

+0

ale zatrzymuje on tylko robotnika od zakończenia zadania, instancja pracownika jest nadal w pamięci. – vsync

+1

@vsync Pracuję również z instancjami WebWorker. W moim przypadku potrzebuję 4 pracowników do pracy w 4 odrębnych obszarach DOM, które muszą być aktualizowane co sekundę w oparciu o pewne informacje, które przekazuję każdemu pracownikowi WWW, który jest przetwarzany i wysyłany z powrotem do przeglądarki. Czy w tym przypadku powinienem zakończyć()/zamknąć() każdego WebWorkera po każdym wywołaniu, czy mogę ponownie użyć tego samego bez obawy o problemy z wydajnością, wycieki pamięci itp.? –

Powiązane problemy