Hace poco se dio a conocer la noticia de que Facebook ha tomado la decisión de liberar el código fuente del kit de herramientas memlab, el cual está diseñado para analizar porciones del estado de la memoria asignada dinámicamente (heap), determinar una estrategia para optimizar el trabajo con memoria y detectar fugas de memoria que ocurren cuando ejecutando código JavaScript.
El marco fue creado para analizar las causas del alto consumo de memoria cuando se trabaja con sitios web y aplicaciones web. Por ejemplo, se usó memlab para analizar el consumo de memoria cuando se usaba una nueva versión del sitio Facebook.com, que reveló fugas que provocaron un bloqueo del navegador en el lado del cliente debido al agotamiento de la memoria libre.
Las personas que usan nuestras aplicaciones web a menudo notarán problemas de rendimiento y corrección funcional de inmediato. Una pérdida de memoria, sin embargo, es una historia diferente. No es perceptible de inmediato, porque consume una parte de la memoria a la vez, lo que afecta a toda la sesión web y hace que las interacciones posteriores sean más lentas y menos receptivas.
Para ayudar a nuestros desarrolladores a abordar esto, creamos MemLab , un marco de prueba de memoria de JavaScript que automatiza la detección de fugas y facilita la localización de las fugas de memoria. Hemos utilizado MemLab en Meta para contener con éxito los aumentos de memoria insostenibles e identificar fugas de memoria y oportunidades de optimización de memoria en nuestros productos e infraestructura.
El alto uso de memoria tiene un impacto estadísticamente significativo y negativo en la carga de páginas y rendimiento de la interacción (cuánto tiempo lleva cargar una página o realizar una interacción)
Métricas de participación del usuario (usuarios activos, tiempo de permanencia en el sitio, número de actividades realizadas)
Las causas de las fugas de memoria al ejecutar código JavaScript pueden ser la presencia de referencias ocultas a objetos, por lo que el recolector de basura no puede liberar la memoria ocupada por el objeto, el almacenamiento en caché irrazonable de valores o la implementación de desplazamiento infinito sin desalojar elementos de lista antiguos.
Por ejemplo, en el siguiente código de Chrome, la pérdida de memoria se produce debido al objeto «obj», aunque esté configurado como nulo, porque Chrome mantiene referencias internas a los objetos representados para permitir que se inspeccionen más tarde en la consola web.
El funcionamiento básico de Memlab, es el siguiente:
- Primero hace la detección de pérdidas de memoria en el navegador, Memlab permite comparar automáticamente instantáneas de memoria dinámica, detectar fugas de memoria y agregar resultados.
- Una API transversal de montón orientada a objetos que permite implementar sus propios algoritmos de detección de fugas e implementar sistemas para analizar instantáneas de montón. El análisis de montón es compatible con navegadores basados en el motor Chromium, así como para las plataformas Node.js, Electron y Hermes.
- Interfaz de línea de comandos y API para encontrar oportunidades para optimizar el uso de la memoria.
- Un sistema de afirmación para Node.js que permite crear pruebas unitarias y ejecutar programas basados en Node.js para dividir su propio estado, probar su memoria o escribir afirmaciones avanzadas.
- Agrupación de rastros de retención, MemLab agrupa todos los rastros de retención y muestra un rastro para cada grupo de objetos filtrados que comparten rastros de retención similares. El seguimiento también incluye información de depuración, como nodos dominadores y tamaños retenidos.
- Reportando las fugas, MemLab se puede ejecutar en intervalos regulares a lo largo del día para obtener una señal continua sobre las regresiones de memoria. Cualquier nueva regresión se agrega a un tablero interno, donde se recopilan y clasifican los rastros de retención agrupados de todas las fugas de memoria detectadas. Luego, los desarrolladores pueden hacer clic y ver las propiedades de los objetos en el rastro de retención de cada pérdida de memoria.
Finalmente si estás interesado, debes saber que Memlab código es de código abierto bajo la licencia MIT y puedes conocer más al respecto en el siguiente enlace.