Open-Source-Framework von Facebook zur Erkennung von Speicherlecks in JavaScript

Facebook (in der Russischen Föderation verboten) hat den Quellcode des Memlab-Toolkits geöffnet, das dazu dient, Abschnitte des Zustands des dynamisch zugewiesenen Speichers (Heap) zu analysieren, Strategien zur Optimierung der Speicherverwaltung zu bestimmen und Speicherlecks zu identifizieren, die bei der Ausführung von Code auftreten JavaScript. Der Code ist unter der MIT-Lizenz offen.

Das Framework wurde erstellt, um die Gründe für einen hohen Speicherverbrauch bei der Arbeit mit Websites und Webanwendungen zu analysieren. Beispielsweise wurde memlab verwendet, um den Speicherverbrauch bei der Nutzung einer neuen Version der Website Facebook.com zu analysieren, wodurch Lecks identifiziert werden konnten, die aufgrund der Erschöpfung des freien Speichers zum Absturz des Browsers auf der Clientseite führten.

Ursachen für Speicherlecks beim Ausführen von JavaScript-Code können versteckte Objektverweise sein, die den Garbage Collector daran hindern, den vom Objekt belegten Speicher freizugeben, unsinniges Zwischenspeichern von Werten oder die Implementierung eines unendlichen Scrollens ohne Entfernen alter Listenelemente. Im folgenden Code in Chrome tritt beispielsweise ein Speicherverlust aufgrund des Objekts „obj“ auf, obwohl ihm der Wert Null zugewiesen ist, da Chrome interne Verweise auf die Ausgabeobjekte zur späteren Überprüfung in der Webkonsole speichert . var obj = {}; console.log(obj); obj = null;

Hauptmerkmale von memlab:

  • Erkennen von Speicherlecks im Browser. Mit Memlab können Sie dynamische Speicherstatus-Snapshots automatisch vergleichen, Speicherlecks erkennen und die Ergebnisse aggregieren.
  • Eine objektorientierte API für die Heap-Iteration, mit der Sie Ihre eigenen Leckerkennungsalgorithmen und Systeme zur Analyse von Heap-Status-Snapshots implementieren können. Die Heap-Analyse wird für Browser unterstützt, die auf der Chromium-Engine basieren, sowie für die Plattformen Node.js, Electron und Hermes.
  • Befehlszeilenschnittstelle und API zum Finden von Möglichkeiten zur Optimierung der Speichernutzung.
  • Ein Assertionssystem für Node.js, mit dem Sie Unit-Tests erstellen und auf Node.js basierende Programme ausführen können, um Slices Ihres eigenen Zustands zu erstellen, Ihren Speicher zu testen oder erweiterte Assert-Prüfungen zu schreiben.

Source: opennet.ru

Kommentar hinzufügen