Domanda

Ho un'enorme app Web che presenta problemi di perdita di memoria in IE 6.

Risolvere una perdita di memoria in un esempio di codice di 5 righe che dimostra il problema è semplice.

Ma se ho un'applicazione molto grande, da dove dovrei iniziare?

È stato utile?

Soluzione

Guardare Gocciolare.Questo di solito elimina le congetture dalle perdite di memoria di IE.

Se per qualche motivo Drip non lo trova, dai un'occhiata da vicino a qualsiasi codice JavaScript che funzioni con gli eventi.Questa è quasi sempre la fonte di qualsiasi significativa perdita di memoria in un browser.

Distruggere un elemento DOM con gestori ad esso collegati, senza prima rimuovere tali gestori, impedirà il recupero della memoria associata a tali gestori.

Altri suggerimenti

L'applicazione utilizza molto JavaScript?

In tal caso, una cosa che ho scoperto che aiuta a evitare perdite di memoria è assicurarsi di utilizzare un framework JavaScript come Prototype o jQuery perché hanno provato e testato codice di gestione degli eventi che non perde memoria.

Ecco come ho risolto il problema della perdita di memoria in IE7.L'idea è di disporre/impostare su null tutte le proprietà di espansione su tutti i nodi DOM allo scaricamento della pagina.Questo ha funzionato per me.Potresti trovarlo utile.

<!--[if lt IE 8]>
<script type="text/javascript">

function disposeAll() {
    if (window.document.all) {
        for (var index = 0; index < window.document.all.length; index++) {
            try { dispose(window.document.all[index], []); } catch (e) { debugger; }
        }
    }
    dispose(window.document.body, []);
    dispose(window.document, []);
    dispose(window, []);
    window.disposeAll = null;
    window.dispose = null;
    window.onunload = null;
}

function dispose(something, map) {
    if (something == null) return;
    if (something.dispose && typeof (something.dispose) == 'function') {
        try { something.dispose(); } catch (e) { debugger; }
    }
    map.push(something);
    for (var key in something) {
        var value = null;
        try { value = something[key]; } catch (e) { };
        if (value == null || value == dispose || value == disposeAll) continue;

        var processed = null;
        for (var index = 0; index < map.length; index++) {
            if (map[index] === value) {
                processed = value;
                break;
            }
        }
        if (processed != null) continue;
        var constructor = value.constructor;
        if (constructor == Object || constructor == Array) {
            try { dispose(value, map); } catch (e) { debugger; }
        }
        if (constructor == Object || constructor == Array || constructor == Function) {
            try { something[key] = null; } catch (e) { debugger; }
        }
    }
    map.pop();
}

(function() {
    var previousUnloadHandler = window.onunload;
    if (previousUnloadHandler == null) {
        window.onunload = disposeAll;
    } else {
        window.onunload = function() {
            previousUnloadHandler.apply(this, arguments); // <== HERE YOU MAY WANT TO HAVE AN "IF" TO MAKE SURE THE ORIGINAL UNLOAD EVENT WASN'T CANCELLED
            disposeAll();
            previousUnloadHandler = null;
        };
    }
}());

</script>
<![endif]-->

Potresti voler rimuovere tutto il debugger "; Dichiarazioni se non hai voglia di affrontare alcune eccezioni occasionali.

Stai perdendo memoria dalle funzioni Java?

Ecco una soluzione:Prendi il tuo Java fatto in casa e buttalo.Utilizza uno dei framework Javascript standard, come jQuery.

Se stai utilizzando JavaScript complesso e non sei un guru di Java, non farlo da solo.

Modificare:Cosa, è un cattivo consiglio?Javascript non è solo un semplice linguaggio di scripting;è un linguaggio di programmazione complesso e sorprendentemente potente, strettamente legato al DOM HTML, che viene implementato in modo diverso nei diversi browser.Se lo fai in modo sbagliato, non solo perderai memoria, ma lancerai anche errori ovunque e generalmente renderai l'esperienza di navigazione terribile.Vuoi allontanare le persone che visitano il tuo sito web?NO?Quindi utilizza un framework Javascript e sbarazzati di tutte le tue stronzate hackerate su più browser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top