Este artículo describe las filtraciones de memoria de JavaScript y las habilidades de gestión de memoria, que son muy prácticas. Compártelo para su referencia. Los métodos específicos son los siguientes:
El contenido de este artículo es de Google WebPerf (London Webperf Group), 26 de agosto de 2014.
En términos generales, las aplicaciones web de JavaScript eficientes deben ser suaves y rápidas. Cualquier aplicación que interactúe con los usuarios debe considerar cómo garantizar que la memoria se use de manera eficiente, porque si se consume demasiado, la página se bloqueará, lo que obliga al usuario a recargar. Y solo puedes esconderte en la esquina y llorar.
La recolección de basura automática no sustituye a la gestión efectiva de la memoria, especialmente en aplicaciones web grandes y de larga duración. En este artículo, demostraremos cómo administrar de manera efectiva la memoria a través de DevTools de Chrome.
Y aprenda a resolver problemas de rendimiento, como fugas de memoria, pausas de recolección de basura frecuentes y hinchazón de memoria general, cosas que realmente le costan la energía.
Addy Osmani muestra muchos ejemplos en su PPT que causarán fugas de memoria en Chrome V8:
1) Elimine una propiedad de objeto para ralentizar este objeto (consumiendo 15 veces más memoria)
var o = {x: 'y'}; eliminar buey; // en este momento o se convertirá en un objeto lento buey; // var o = {x: 'y'}; o = null; // Esto debería ser2) Cierre
Al introducir variables fuera del cierre en el cierre, este objeto no puede ser recolectado de basura (GC) cuando termina el cierre.
var a = function () {var lateGestr = new Array (1000000) .Join ('x'); function de return () {return grandegestr; }} ();3) Fuga de DOM
Cuando se elimina el COM original, la referencia del sub-nodo no se puede reciclar si no se elimina.
var select = document.querySelector; var treeref = select ('#árbol'); // En el árbol COM, Leafref es un nodo infantil de TreeFre var LeafRef = select ('#Leaf'); var cuerpo = select ('cuerpo'); Body.removechild (Treeref); //#El árbol no se puede pagar porque Treeref todavía está allí // Solución: treeref = null; // El árbol no se puede reembolsar porque Leafref todavía está allí Leafref = nulo; // ahora se puede lanzar #tree.4) Fuga del temporizador de conteo de temporizadores (determinación)
Los temporizadores también son lugares comunes donde se producen fugas de memoria:
for (var i = 0; i <90000; i ++) {var buggyObject = {callagain: function () {var ref = this; var val = setTimeOut (function () {ref.callagain ();}, 90000); }} buggyObject.callagain (); // Aunque desea reciclar, el temporizador sigue siendo buggyObject = null;}5) Memoria de depuración
La propia herramienta de depuración de memoria de Chrome puede ver fácilmente el uso de la memoria y las filtraciones de memoria:
Haga clic en Registro en la línea de tiempo -> Memoria:
Espero que este artículo sea útil para la programación de JavaScript de aprendizaje de todos.