Marco de código abierto de Facebook para detectar pérdidas de memoria en JavaScript

Facebook (prohibido en la Federación de Rusia) ha abierto el código fuente del kit de herramientas memlab, diseñado para analizar porciones del estado de la memoria asignada dinámicamente (montón), determinar estrategias para optimizar la gestión de la memoria e identificar pérdidas de memoria que se producen al ejecutar código en JavaScript. El código está abierto bajo la licencia MIT.

El marco fue creado para analizar las razones del alto consumo de memoria cuando se trabaja con sitios web y aplicaciones web. Por ejemplo, se utilizó memlab para analizar el consumo de memoria al utilizar una nueva versión del sitio web Facebook.com, lo que permitió identificar fugas que provocaban que el navegador fallara en el lado del cliente debido al agotamiento de la memoria libre.

Las causas de las pérdidas de memoria al ejecutar código JavaScript pueden ser referencias a objetos ocultos que impiden que el recolector de basura libere la memoria ocupada por el objeto, almacenamiento en caché imprudente de valores o implementación de desplazamiento infinito sin desalojar elementos de lista antiguos. Por ejemplo, en el siguiente código en Chrome, se produce una pérdida de memoria debido al objeto “obj”, a pesar de que se le asigna el valor nulo, ya que Chrome almacena referencias internas a los objetos de salida para su posterior inspección en la consola web. . var objeto = {}; consola.log(obj); objeto = nulo;

Características principales de memlab:

  • Detectar pérdidas de memoria en el navegador. Memlab le permite comparar automáticamente instantáneas del estado de la memoria dinámica, detectar pérdidas de memoria y agregar los resultados.
  • Una API orientada a objetos para la iteración del montón, que le permite implementar sus propios algoritmos de detección de fugas e implementar sistemas para analizar instantáneas del estado del montón. El análisis de montón es compatible con navegadores basados ​​en el motor Chromium, así como con 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 aserción para Node.js que le permite crear pruebas unitarias y ejecutar programas basados ​​en Node.js para crear porciones de su propio estado, probar su memoria o escribir comprobaciones de aserción extendidas.

Fuente: opennet.ru

Añadir un comentario