5

Korzystam z widoku Chrome's Timeline, aby spróbować wyśledzić niektóre wycieki pamięci na mojej stronie. Znalazłem jeden szczególny wyciek pamięci, który wynika z tworzenia instancji robotników internetowych, której nie potrafię wymyślić, jak się go pozbyć.Wyciek pamięci Web Worker?

Pozbyłem się strony, aby załadować pracownika sieci i nic więcej. Za każdym razem, gdy odświeżam stronę, liczba wyświetleń dokumentu w widoku osi czasu Chrome stale wzrasta o 1. Jeśli skomentuję połączenie z konstruktorem modułu Worker i zacznę odświeżać stronę, liczba dokumentów zwiększy się, a następnie zmniejszy, skutecznie pozostając bez zmian. Ręczne kończenie/zamykanie procesu roboczego nie rozwiązuje problemu (chociaż widzę, że pracownik znika, gdy patrzę na kartę Źródła w narzędziach programistycznych).

Oto mój przycięty plik .htm w dół. Mogę odtworzyć problem przy użyciu tylko tego krótkiego fragmentu pliku html/javascript:

<html> 
<script type="text/javascript"> 
var worker_blob = new Blob(["var test = 1;"]); 
var worker_url = window.URL.createObjectURL(worker_blob); 
// Comment out the line below and the memory leak goes away 
var worker = new Worker(worker_url); 
window.URL.revokeObjectURL(worker_url); 
</script> 
</html> 
+0

Kiedy twój robotnik zakończy swoje zadanie, może [zamknąć] (https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIWorkerScope#close()) sam lub twoja strona może wywołać 'terminate'. –

+0

Próbowałem już obydwu i żadna z nich nie rozwiązuje problemu. Ponadto pracownik powinien zostać wypowiedziany, gdy opuszczę stronę. –

+2

Czy to przez przypadek https://code.google.com/p/chromium/issues/detail?id=181680? –

Odpowiedz

3

To jest wyciek pamięci w przeglądarce Chrome w wersji 25. Wygląda na to, że został naprawiony w przeglądarce Chrome 26, ponieważ problemu nie można już odtworzyć.