Pregunta

Tengo una gran aplicación web que está teniendo problemas con la pérdida de memoria en IE 6.

La fijación de una pérdida de memoria en un 5 línea de código de ejemplo que muestra el problema es fácil.

Pero si tengo una gran aplicación, donde debería empezar? ¿

¿Fue útil?

Solución

Echa un vistazo Goteo.Que generalmente toma las conjeturas de la IE pérdidas de memoria.

Si por alguna razón de Goteo no la encuentra, tomar un vistazo de cerca a todo el código JavaScript que trabaja con eventos.Que es casi siempre el origen de cualquier pérdida de memoria significativa en un navegador.

La destrucción de un elemento de DOM con los controladores conectados a ella, sin quitar los controladores en primer lugar, prevenir la memoria asociada con los controladores de ser recuperado.

Otros consejos

¿El uso de la aplicación de una gran cantidad de JavaScript?

Si lo hace, entonces una cosa que me he encontrado que ayuda para evitar pérdidas de memoria para asegurarse de que usted está usando un framework JavaScript tales como Prototype o jQuery porque ellos han intentado y probado código de control de eventos que no tenga fugas de memoria.

Aquí es cómo he resuelto el problema de pérdida de memoria en IE7.La idea es eliminar/set null todas expando-propiedades en todos los nodos DOM en la descarga de la página.Esto funcionó para mí.Usted puede encontrar que es útil.

<!--[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]-->

Puede que desee quitar todos los "depurador;" declaraciones si usted no se siente como tratar con algunas excepciones puntuales.

Eres una fuga de memoria de Java funciones?

Aquí tienes la solución:Tome su homebrew java y tirar.Utilice uno de los estándar de frameworks de javascript, como jQuery.

Si usted está haciendo javascript complejo y no es un java gurú, no lo haga usted mismo.

Editar:Qué, es que un mal consejo?Javascript no es un simple lenguaje de secuencias de comandos;su complejo y sorprendentemente potente lenguaje de programación que está estrechamente vinculado con el DOM de HTML, el cual es implementado de forma diferente en los distintos navegadores.Si lo haces mal, no sólo la pérdida de la memoria, pero también producir errores en todas partes y en general hacer que la experiencia de navegación horrible.¿Quieres ahuyentar a la gente que viene a su sitio web?No?A continuación, utilizar un framework javascript y deshacerse de todas sus hacky cross-browser bullshittery.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top