ugrás a tartalomhoz

Memória szivárgás elkerülése JavaScriptben

Hojtsy Gábor · 2006. Okt. 3. (K), 13.48
Amikor JavaScript fejlesztésre adjuk a fejünket, nem is gondoljuk, hogy szigorúan figyelnünk kell a meghívott függvények sebességére vagy méginkább a memória szivárgások előfordulására. Mint Jano korábbi bejegyzésében megmutatta, érdemes a hívott függvények optimalizálására, és a hívásuk gyakoriságára is odafigyelni. Tegnap pedig Jack Solocum közölt blog bejegyzést arról, hogy milyen alapvető módokon kerülhetjük el a memória szivárgást. A 3 Easy Steps to Avoid JavaScript Memory Leaks című bejegyzést érdemes elolvasni.
 
1

thx, kimaradt belőle a Drip-t az IE Leak Detektor

toxin · 2006. Okt. 3. (K), 14.06
ha jól látom, http://outofhanwell.com/ieleak/index.php?title=Main_Page

üdv t

ui: egyébként jön itt is rendesen
Leaks in window 0x2f4c2c0:
[+] [leaked object] (2ff2c88, http://weblabor.hu/themes/azigazi/layout.js, 69-70) = function _navigationStopTimer() {
    clearInterval(navigationHoverInterval);
}
 [ ] prototype (2ddc3d0) = [object Object]
[+] [leaked object] (34733a0, http://weblabor.hu/themes/azigazi/bbeditor.js, 165-165) = function (event) {
    return (controlsKeyHandler(this, event));
}
 [ ] prototype (2ddc488) = [object Object]
[+] [leaked object] (34733b0, http://weblabor.hu/themes/azigazi/bbeditor.js, 166-166) = function () {
    controls_timeout = setTimeout("removeControl(document.getElementById('" + this.id + "'))", 500);
}
 [ ] prototype (2ddc4a0) = [object Object]
[+] [leaked object] (34733b8, http://weblabor.hu/themes/azigazi/bbeditor.js, 167-167) = function () {
    attachControl(this);
}
 [ ] prototype (2ddc600) = [object Object]
[+] [leaked object] (2ff2c80, http://weblabor.hu/themes/azigazi/layout.js, 56-66) = function _navigationStartTimer(e) {
    var event = e;
    _navigationStopTimer();
    if (typeof event == "undefined") {
        event = window.event;
    }
    if (typeof event.target != "undefined") {
        navigationHoverSource = event.target;
    } else {
        if (typeof event.srcElement != "undefined") {
            navigationHoverSource = event.srcElement;
        } else {
            return (true);
        }
    }
    navigationHoverInterval = setInterval("_navigationHover()", 300);
    return (false);
}
 [ ] prototype (2ddc678) = [object Object]


nemnéztem meg miez csak jelzem :)
2

csorgás

Hidvégi Gábor · 2006. Okt. 3. (K), 17.49
Nem tudom, hogy érdemes-e kifejezetten olyan kódot írni, ami az Internet Explorer (6) bugjaira vannak kihegyezve, hisz
1, bár az egyértelmű, hogy van szivárgás, én 8-10 órányi böngészés és fejlesztés után szoktam újraindítani a Maxthont, ami IE-re épül; viszonylag sok oldalt nyitok meg és használok egyszerre; egy átlagos felhasználó ennek a töredékével "beéri", jóval kevesebb ideig,
2, kb. 2007 elejétől várható az IE6-ok lecserélése, az IE7 elterjedése, amit már folyamatosan fejlesztenek és javítják az ilyen hibákat.

Ezt kb. olyannak tartom, mint amikor IE-re optimalizálnak egy oldalt, annyi eltéréssel, hogy itt persze mindenhol lefut jól, de egy sor - később - fölösleges kódot tartalmaz.
3

ezt most kinek írtad :S egyébként igazad van

toxin · 2006. Okt. 3. (K), 18.02
de a fenti cikk fx-alá készült Leak Monitor - https://addons.mozilla.org/firefox/2490/ extension-ról szól

üdv t
5

válasz

Hidvégi Gábor · 2006. Okt. 3. (K), 22.00
Ja, neked akartam válaszolni. : )

De firefoxra is ugyanígy igaz, amit írtam, sőt... : )
4

hát izé

amonrpg · 2006. Okt. 3. (K), 21.27
Átolvasva a cikket bennem az fogalmazódott meg (bár ne legyen igazam!), hogy ez a fickó elkötelezett YUI mániás, és csupán emiatt született meg az iromány. :(
Amellett persze, hogy természetesen törekedni kell a memory-leak-ek kiküszöbölésére.
Amúgy nem tudom, hogy ez a memory-leak detektáló cucc mennyire megbízható.
Van valakinek módszere, hogy hogyan lehet ezt mérni?
6

sajna, még csak ott tartok

toxin · 2006. Okt. 3. (K), 22.19
hogy eltettem mint elolvasandót ezt a linket, nem tudok hozzászólni :(

http://www.quirksmode.org/blog/archives/coding_techniques/memory_leaks/index.html
itt találsz ilyesmi cikkeket a témáról ( blogsearch.google.com -ról nem beszélve, majd számolj be :) )

üdv t
7

ProcessExplorer

zila · 2006. Okt. 13. (P), 09.07
Én egy IE only webalkalmazást fejlesztek (sajna egy ActiveX komponens miatt nem megy az alkalmazás más böngészőben) Bizony okoz gondokat a memória szivárgás rendesen. A mérést ProcessExplorer-rel végzem, az alkalmazás használata közben az IE memória foglalása szépen nő és nő, pár óra után már észrevehetően belassul a működése... Prototype-ot erősen használok a programban. Most valamennyire sikerült javítani rajta, de még mindig nem az igazi, hisz első körben a saját kódjaimat javítottam, volt mit :)
8

prototype memory leak

amonrpg · 2006. Okt. 13. (P), 10.14
Jó, én meg csináltam egy erős webchat-et prototype felhasználásával.
IE alatt stabil 50mega a memóriafoglalása, a Firefox meg felteker ~200-300 megáig. A már ismert képekkel kapcsolatos bug miatt. Ebben meg ugye a smiley-k erősen jelen vannak. Én azt várom, mikor javítják végre ki azt a részét a FF-nak. :(

Szóval én nem tapasztaltam olyat, hogy a Prototype egyértelműen, minden böngésző alatt memory leak-elne, ez persze nem zárja ki azt, hogy mégis így van. :)