Znalazłem to na wszystkich testowanych przeglądarkach - IE, Firefox, Chrome i Safari w oknie Sand Safari na Apple.Odświeżenie przeglądarki nie powoduje zbierania śmieci
Podobno przycisk odświeżania przeglądarki, przycisk Wstecz lub łącze przesyłania do przodu powinny zrzucać węzły przeglądarki i zmienne javascript oraz obiekty itp. Wygląda na to, że nie ma to miejsca w przypadku WebGL. Po raz pierwszy zauważyłem to podczas opracowywania złożonej aplikacji WebGL, która wymaga od 100 MB do 200 MB pamięci. Podczas rozwoju muszę dużo odświeżyć i mój komputer zacznie zwalniać i zamarzać po 5-10 odświeżeniach.
Po kilku badaniach zdałem sobie sprawę, że tak nie powinno być. Przyjmowanym rozwiązaniem problemu z wyciekiem pamięci jest odświeżenie strony, na której należy zwolnić wszystkie obiekty i zmienne javascript oraz węzły domena. Ale spójrz na następujące obrazy:
Więc o co tu chodzi? W przypadku małych aplikacji nie jest to zauważane, ale w przypadku dużych aplikacji WebGL, takich jak moja (orbitingeden.com), jest to poważny problem, a moi użytkownicy sądzą, że oprogramowanie jest jeszcze bardziej szkodliwe dla środowiska niż w rzeczywistości. Poniższy rysunek przedstawia te odświeża wydziobujących wszystkie moje dostępnej pamięci, więc zbieranie śmieci nie działa i/lub JS i DOM obiekty nie są zwolnione:
http://orbitingeden.com/images/big_memory_after.png
Czy ktoś wie o trick zmusić przeglądarka, aby zrobić prawdziwy zrzut pamięci? Dlaczego cała dokumentacja jest błędna?
https://bugs.webkit.org/show_bug.cgi?id=76225 – gman
@gman: jeśli odpowiesz na pytanie, dam ci kredyt. Streszczenie: WebGL używa kontekstu, który jest chroniony przez domenę i kartę, nieistotną dla konkretnej strony (odświeżanie). W rezultacie dowolna pamięć przydzielona do renderowania WebGL nie jest zwalniana w celu usunięcia pamięci, dopóki użytkownik nie odejdzie od domeny podstawowej lub nie zamknie karty. Ewentualną poprawką byłoby dodanie przycisku wyjścia do aplikacji, która wykonuje szybkie przekierowanie do nowej domeny, która przekierowuje z powrotem. –
Błąd zostanie naprawiony każdego dnia teraz, więc mam nadzieję, że wkrótce nie będzie potrzeby obejścia. W teście zgodności z webgl jest test na to (https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/tests/conformance/context/context-creation-and-destruction. html) – gman