[ Ilidan13 @ 08.09.2010. 15:27 ] @
Pozdrav,

imam slijedeći problem: na internoj web aplikaciji koju izrađujem koristim dosta ajax-a, točnije jquery $.ajax i $.getjson. Problem je u tome što izgleda da Internet Explorer 8 ne oslobađa memoriju nakon tih requesta. Tako da mi memorija koju internet explorer koristi konstantno raste, dok se na kraju aplikacija ne zablokira.

Na internetu sam vidio neka moguća riješenja. Na jquery stranici sam pronašao i navodno riješenje, međutim nisam siguran kako da ga ispravno upotrijebim http://dev.jquery.com/ticket/6242 , pa ako neko ima ideju bilo bi super.

Unaprijed zahvaljujem,
Pozdrav!
[ Nikola Poša @ 08.09.2010. 18:27 ] @
Rešenje predloženo na tom linku podazumeva edit-ovanje kôda same jQuery biblioteke. Koju verziju jQuery-ja koristiš? Baci pogled i na ovu diskusiju na StackOverflow-u, tu je prijavljen isti problem, a vidim da ima par predloga za njegovo rešavanje.
[ Ilidan13 @ 15.09.2010. 09:02 ] @
Pogledao sam te diskusije. Uglavnom, skinuo sam novu (kompletnu) verziju jquery-a, i dodao sam kod predložen u diskusijama u jquery datoteku:

// Stop memory leaks
if ( s.async ) {
xhr.onreadystatechange = null;
xhr.abort = null;
xhr = null;
}

Poboljšanje je vidljivo, međutim i dalje mi memorija raste kako se aplikacija koristi. Valjda ću pronaći još neki način da se oslobodi ta memorija.
Ako neko ima ideje, neka slobodno iznese.

Pozdrav!
[ misk0 @ 18.09.2010. 13:27 ] @
Postoji li mogucnost da memory leak uzrokuje nesto drugo? Recimo unistavanje objekata brisanjem njihovog sadrzaja ali ne unbind-ovanja evenata koji su im dodjeljeni? To IE ne odradjuje bas najbolje.
[ Ilidan13 @ 22.09.2010. 13:37 ] @
Moguće je naravno, ali javascript koji ja koristim i nije nešto komplikovan. Sastoji se od toga da preko jquery $ajax-a pozovem php skriptu, koja vrati html sa listom (<li><img/></li>) slika. Taj html onda stavim u innerHTML određenog diva. Kada korisnik npr. klikne OK, ponovno se poziva funkcija sa $ajax-om, te se nove slike stave u innerHTML.

Pokušao sam koristiti i prototype umjesto jquery-a, ali ista stvar. Memoriju koja se zauzme prilikom prikaza slika se ne oslobađa nakon što ih zamijenim sa novim slikama. :-(. Dešava se isto i sa ne-slikovnim sadržajem. Ali slike memorijski zahtjevnije pa su mi one najveća briga.

Proučavao sam na internetu malo problem cirkularnih referenci, i closure-a, ali moj javascript je relativno jednostavan te mi se čini da takvih stvari nema.

Pozdrav!
[ Aleksandar Ružičić @ 22.09.2010. 15:42 ] @
ako vec koristis jquery umesto da overwritujes innerHTML svaki put uradi prvo empty() on bi trebao da se pobrine da nema memory leakova.

takodje bih ti savetovao da izbegnes ubacivanje novih elemenata putem innerHTML-a, ja sam za slicni scenario napravio neki svoj micro-template engine u javascriptu i sa serverom sam komunicirao pomocu JSON-a (tj server je vracao podatke u JSON formatu koje ja prosledim templejtu koji kreira potrebnu strukturu koristeci create/append-Element funkcije).

danas nema potrebe da pravis nesto svoje jer ima nekoliko odlicnih template pluginova za jquery, pre svega jquery-tmpl koji je i "oficijelni" template plugin.
[ Ilidan13 @ 23.09.2010. 07:56 ] @
Izgleda da je ipak problem u IE8. Jučer sam malo eksperimentirao, i dohvaćao slike ne preko jquery-a, nego "ručno" napravljenog xmlHttpRequesta, i ista stvar.
InnerHTML sam overwrite-ao, znači svaki put dohvatim HTML objekt preko document.getElementById...., i tada njegovom innerHTML-u dodijelim novi sadržaj.
Pokušao sam zatim sa IE7, i tada nije bilo nekih memory leak-ova. Čudno, ali eto. Tako da ću eventualno preći na IE7.

Pozdrav!