Facebook hat den Code des Frameworks zur Erkennung von Speicherlecks in JavaScript geöffnet.

Das Unternehmen Facebook (in der RF verboten) hat die Quelltexte des Werkzeugs memlab veröffentlicht, das zur Analyse von Zuständen dynamisch verteilter Speicher (Heap) dient, um Optimierungsstrategien für den Umgang mit Speicher zu bestimmen und Speicherlecks zu identifizieren, die beim Ausführen von JavaScript-Code auftreten. Der Code ist unter der MIT-Lizenz veröffentlicht.

Das Framework wurde entwickelt, um die Ursachen des hohen Speicherverbrauchs bei der Arbeit mit Webseiten und Webanwendungen zu untersuchen. Zum Beispiel wurde mithilfe von memlab der Speicherverbrauch bei der Verwendung der neuen Version von Facebook.com analysiert, was die Identifizierung von Lecks ermöglichte, die zu einem Absturz des Browsers auf der Client-Seite aufgrund von Speichererschöpfung führten.

Ursachen für Speicherlecks beim Ausführen von JavaScript-Code können versteckte Referenzen auf Objekte sein, die verhindern, dass der Garbage Collector den vom Objekt belegten Speicher freigibt, unvernünftiges Caching von Werten oder die Implementierung eines endlosen Scrollens ohne das Herausdrängen alter Listenelemente. Zum Beispiel tritt im folgenden Code in Chrome ein Speicherleck auf wegen des Objekts „obj“, obwohl ihm der Wert null zugewiesen wird, da Chrome interne Verweise auf ausgegebene Objekte speichert, um deren anschließende Inspektion in der Webkonsole zu ermöglichen. var obj = {}; console.log(obj); obj = null;

Die Hauptfunktionen von memlab:

  • Identifizierung von Speicherlecks im Browser. Memlab ermöglicht es, automatisch Schnappschüsse des Zustands des dynamischen Speichers zu vergleichen, Speicherlecks zu identifizieren und Ergebnisse zu aggregieren.
  • Objektorientierte API zum Durchlaufen des Heaps, die es ermöglicht, eigene Algorithmen zur Identifizierung von Lecks zu implementieren und Systeme zur Analyse von Heap-Schnappschüssen zu realisieren. Die Heap-Analyse wird für Browser auf Basis der Chromium-Engine sowie für die Plattformen Node.js, Electron und Hermes unterstützt.
  • Kommandozeilen-Interface und API zur Auffindung von Optimierungsmöglichkeiten für den Speicherverbrauch.
  • Ein Assert-System für Node.js, das die Erstellung von Unit-Tests und die Ausführung von Programmen auf Basis von Node.js zur Erstellung von Schnappschüssen des eigenen Zustands, zur Überprüfung des eigenen Speichers oder zur Erstellung erweiteter Assert-Prüfungen ermöglicht.

Quelle: opennet.ru

60GB SSD 8Gb DDR4