![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 29.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam problem z cyklicznie (setInterval) wywoływaną funkcją. Jej zadaniem jest m.in. podmiana atrybytu src dla <img>:
Przy każdym wywołaniu tej funkcji zwiększa się zużycie pamięci przez przeglądarkę. Jak to zwalczyć? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
po pierwsze nie jestem pewien, czy podałeś cały dokładny kontekst czy tylko fragment tego co zamierzasz uzyskać...
po drugie każdy z tych obrazków może być buforowanych w danej przeglądarce... po trzecie skoro wiesz, w którym obrazku zmieniasz ścieżkę to znacznie szybciej by to działało jeśli byś zbuforował gdzieś albo obiekt jQuery z wyszukanym elementem DOM albo sam surowy element drzewa DOM... najlepiej daj przykład live... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 29.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Kod jest trochę zawiły i jest tam kilka innych dodatkowych funkcji dlatego nie zamieszczałem całego.
Cytat po drugie każdy z tych obrazków może być buforowanych w danej przeglądarce... Jak usunąć w takim razie poprzednie obrazki? Cytat po trzecie skoro wiesz, w którym obrazku zmieniasz ścieżkę to znacznie szybciej by to działało jeśli byś zbuforował gdzieś albo obiekt jQuery z wyszukanym elementem DOM albo sam surowy element drzewa DOM... Jak zbuforować taki obiekt DOM? Jakiś przykład, gdzie można to w dokumentacji znaleźć? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 350 Pomógł: 512 Dołączył: 4.01.2009 Skąd: Wrocław / Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak zbuforować taki obiekt DOM? Jakiś przykład, gdzie można to w dokumentacji znaleźć? Zmienną globalną ![]()
Opisz co chcesz osiągnąć, może jest na to jakiś inny lepszy sposób. Co do cache, to może być problem ![]() -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 29.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Opisz co chcesz osiągnąć, może jest na to jakiś inny lepszy sposób. Co do cache, to może być problem ![]() Przykład 'live', kod odpowiedzialny za problem wygląda tak:
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
przede wszystkim to nie jest przykład 'live' (co znaczy, że miałeś podać linka do strony internetowej z działającym całym kodem)...
poza tym kod który podałeś nie trzyma się kupy... rozumiem, iż start jest od animate(), potem zawsze wykonujesz kod assign_image(0) [no warunkowo ale...]... w funkcji assign_image(x) niby tworzysz tymczasowy obiekt obrazka do pobrania ale nie wiem po co skoro po załadowaniu nigdzie go nie wyświetlasz...[PRZECZYTAJ CAŁOŚĆ - WIEM, CHCESZ GO WYŚWIETLIĆ ;P] poza tym gdy już nie potrzebny jest obiekt Image mógłbyś go usunąć gdyż przechowuje wiele danych - a ponieważ jest on przypisany do zmiennej lokalnej to nie zadziała delete i tej zmiennej lokalnej musisz przypisać NULL - różnie to bywa z czyszczeniem zmiennych lokalnych, a ponieważ obiekt i tak przekazujesz dalej przez referencję to nie zostawiaj niepotrzebnych referencji... następna sprawa samo sprawdzanie czy obrazek załadowany - po co aż tyle sprawdzeń skoro masz zdarzenia dla tego obiektu .onload i .onerror do których możesz przypisać funkcję... ale mniejsza o to... to co mnie dalej zastanawia, to przy sprawdzeniu, czy obrazek został załadowany zwiększasz zmienną timestap i ustawiasz loading na zakończony - i patrzmy dalej gdy loading zakończony... podmieniasz atrybut src jakiegoś obrazka w DOM'ie ale!!! z nowym timestapem!!! TO PO CO WCZYTYWAŁEŚ DO BUFORU WCZEŚNIEJSZY OBRAZEK SKORO NAWET Z NIEGO NIE SKORZYSTAŁEŚ ![]() następny przebieg dla tego samego obrazka będzie o tyle szybszy, że choć buforujesz to znowu nie potrzebnie gdyż ten obrazek jest już wcześniej wczytywany do przeglądarki do drzewa DOM przez obiekt $('#img_src') - no do następnego przebiegu nie zwiększasz timestap... i dalej się dzieje to co pisałem od początku... DAJ PRZYKŁAD LIVE TO PRĘDZEJ KTOŚ POMOŻE ;] Ten post edytował zegarek84 6.09.2011, 17:37:40 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 29.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Chyba do końca nie wiedziałem o co chodzi z tym live
![]() Niestety nie jest możliwe pokazanie tego live, gdyż działa to tylko na lokalu. Spróbowałem rozwiązać trochę inaczej funkcje assign_image :
Zauważyłem, ze nawet jeśli w odpowiedzi ajax nie będzie obrazka z każdym nowym żądaniem rośnie zużycie pamięci przeglądarki. Czy jest tak, że po uzyskaniu odpowiedzi z serwera obiekt XMLHttpRequest zajmuje pamięć. Czy można usunąć go ręcznie? Skrypt działa tak, że np co 500 ms pobierany jest nowy obrazek, który zastępuje poprzedni. Czy usunięcie poprzedniego obrazka z drzewa DOM spowoduje usunięcie go z pamięci przeglądarki? Jakieś pomysły? Ten post edytował rulespl 7.09.2011, 13:23:14 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 06:43 |