Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JS/UŻYCIE PAMIECI] Aplikacja wykorzystująca sporo JS stale zwiększa zuzycie pamięci
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
juzwa
Jestem w trakcie robienia aplikacji opartej w dużej części na JS i danych w formacie JSON, wykorzystuję do tego jQuery 1.3

chciałem zobaczyć jak to będzie działac w dłuższym okresie czasu i zapuściłem jakies dane testowe - uruchomiłem program i zostawiłem komputer - o ile sam program działał to jak sprawdziłem użycie pamięci przez przeglądarkę (FF) to z 100MB podskoczyło do 1,4GB tak 14x

pewnie to nie jest normalne i coś robię źle, ale co?

ogólnie aplikacja wygląda następująco

prócz jQuery są jeszcze 4 klasy, na podstawie tych klas jest stworzonych 6 obiektów, we właściwościach tych obiektów sa pojedyncze zmienne (int), a JSON jest najczęściej argumentem metody wywoływanej dla danego obiektu, prócz tego są dwa JSON-y globalne ładowane na początku aplikacji

nie chcę wklejać całego kodu JS, bo to szkoda i miejsca i czasu - ale mam pytanie, na co zwrócić uwagę, co mogę zmienić, poprawić ulepszyć

no chyba że takie zachowanie jest normalne smile.gif
nospor
moze masz wycieki pamieci. Nie usuwasz niepotrzebnych obiektow etc.
wookieb
Spróbuj jeszcze na innej przeglądarce. Pamiętaj, że FF jest pamięciolubne.

Jeżeli używasz settimeout, badz clearInterval to pamietaj o ich usuwaniu jezeli ich nie uzywasz (clearTimeour, clearInterval)
erix
Cytat
nie chcę wklejać całego kodu JS, bo to szkoda i miejsca i czasu - ale mam pytanie, na co zwrócić uwagę, co mogę zmienić, poprawić ulepszyć

Używać profilera. Jest taki w Firebugu. Fakt, to tylko czasowo uwzględni, ale zawsze będziesz miał punkt zaczepienia, bo w większości przypadków duża zaalokowana pamięć = dłuższy czas operacji.

Cytat
- o ile sam program działał to jak sprawdziłem użycie pamięci przez przeglądarkę (FF) to z 100MB podskoczyło do 1,4GB tak 14x

A na innej podwersji Fx jest to samo...? Coś mi tu nie pasuje, ale raz: Fx zapełnia pamięć jak Vista (weźmie, ile ma ;p), dwa: zależy od klas...

Choć na 99% nie jest to sytuacja normalna.
juzwa
wycieki pamięci w JS? niby cos musi "trzymać" zmienną i cały czas tworzyć nową - inaczej by zadziałał garbage collector

co więcej - zauwazyłem, że nawet jak nic się nie dzieje to uzycie pamięci rośnie - może się coś dzieje, ale nie jestem tego świadomy?

odpaliłem Safari 4 - przyrost był mniejszy i co więcej gdy np miałem już iles tam MB to jak dałem minimalizację to schodziło do 16-11MB potem przy maksymalizacji skakało do jakiś 28-33MB potem coś tam robiłem - rosło, ale wystarczyło że zminimalizuję/zmaksymalizuję i wracało do jako takiej normy

w przypadku FF takiej bajery z min/max nie ma

sprawdziłem też na Operze 9.64 - najmniej zużywa pamięci tak między 2/3 a 3/4 tego co Safari 4, a dodtakowo wystepuje bajer z min/max

czy to ma coś wspólnego z rysowaniem i odświerzaniem ekranu - przyznam, że mam trochę ruchomych rzewczy, jais wykres na płótnie, trochę divów absolutnych i takie tam, troche ajaxa itp itd


dla porównania zapuściłem sobie mapy googla i tak sobie porównalem i zobaczyłem, że przy poruszaniu się też jest tam przyrost pamięci - co prawna ja nie mam map, ani tylu zmian, ale czy pryczyna może tkwić w zmianie rzeczy widzialnych dla uzytkownika

Czas wykonania (30.094ms, 1837 wywołań)
Czas wykonania (31.14ms, 1641 wywołań)
Czas wykonania (27.295ms, 1643 wywołań)
Czas wykonania (29.509ms, 1743 wywołań)
Czas wykonania (29.189ms, 1643 wywołań)
Czas wykonania (29.2ms, 1643 wywołań)
Czas wykonania (29.204ms, 1642 wywołań)
Czas wykonania (29.729ms, 1643 wywołań)
Czas wykonania (29.392ms, 1642 wywołań)
co do czasu wywoływania - powyższe zestawienie polegało na czekaniu na wykonie akcji poprzez jakiś timer w JS (wykonywanie cykliczne)

chyba nie jest źle i to chyba świadczy, źle o JS? w tym czasie uzycie pamieci wzrosło z 68 do 126MB (FF)

nie wiem może, ktos na tej podstawie będzie mógł coś więcej powiedzieć
erix
Cytat
inaczej by zadziałał garbage collector

W Fx? tongue.gif Nie wiem, jak w 3.5, ale w 3.0 dla mnie nie jest on rewelacyjny.

Cytat
czy to ma coś wspólnego z rysowaniem i odświerzaniem ekranu - przyznam, że mam trochę ruchomych rzewczy, jais wykres na płótnie, trochę divów absolutnych i takie tam, troche ajaxa itp itd

Dopiero teraz to mówisz...?

Samo rysowanie na płótnie - niestety - trochę zasobów pożera. A co do pozycjonowania absolutnego: zależy, naprawdę zależy. AJAX? Zależy, co masz na myśli. tongue.gif

A tak BTW, spróbuj na nieostylowanym DOM, na próbę - czy będzie nadal to samo? Choć przyznam z doświadczenia - canvas + półprzezroczyste warstwy stają się kulą u nogi dla większości przeglądarek. No i zależy oczywiście od platformy.
juzwa
zrobiłem coś takiego, ze wszedzie gdzie argumentem był JSON to na końcu go usuwałem za pomocą delete i zostawiłem na noc operę z tym problemem - zużycie pamięci przez Operę to po nocce i działaniu na jakiś losowych danych - koło 50MB - czyli podobnie jak było z FF tylko, że na Operze
szkoda, że wcześniej tego nie zrobiłem tez i na Operze - ale porównując do FF to jakoś nie chce mi się wierzyć, ze tych parę deletów spowodowało 20x mniejsze zużycie pamięci (w porównaniu do tego samego czasu działania)
trzeba będzie jeszcze raz zostawić FF-a i się przekonać czy to cos dało, czy to tak juz jest i koniec
nospor
hehe, a mowilem ze masz wycieki pamieci to nie wierzyles winksmiley.jpg
erix
Chyba nadal nie napisałeś, na jakim systemie odpalasz. [;
juzwa
jeśli chodzi o system to testuje to na XP a dokładniej na XAMPP-ie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.