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>
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'. –
Próbowałem już obydwu i żadna z nich nie rozwiązuje problemu. Ponadto pracownik powinien zostać wypowiedziany, gdy opuszczę stronę. –
Czy to przez przypadek https://code.google.com/p/chromium/issues/detail?id=181680? –