Facebook open source raamwerk voor het detecteren van geheugenlekken in JavaScript

Facebook (verboden in de Russische Federatie) heeft de broncode geopend van de memlab-toolkit, ontworpen om segmenten van de toestand van dynamisch toegewezen geheugen (heap) te analyseren, strategieën te bepalen voor het optimaliseren van geheugenbeheer en geheugenlekken te identificeren die optreden bij het uitvoeren van code in JavaScript. De code is open onder de MIT-licentie.

Het raamwerk is gemaakt om de redenen voor een hoog geheugengebruik bij het werken met websites en webapplicaties te analyseren. Memlab werd bijvoorbeeld gebruikt om het geheugengebruik te analyseren bij het gebruik van een nieuwe versie van de Facebook.com-website, waardoor het mogelijk werd om lekken te identificeren die ertoe leidden dat de browser aan de clientzijde crashte vanwege de uitputting van het vrije geheugen.

Oorzaken van geheugenlekken bij het uitvoeren van JavaScript-code kunnen verwijzingen naar verborgen objecten zijn die voorkomen dat de garbage collector het geheugen vrijmaakt dat door het object wordt ingenomen, het onverstandig opslaan van waarden in de cache of de implementatie van oneindig scrollen zonder oude lijstelementen te verwijderen. In de onderstaande code in Chrome treedt bijvoorbeeld een geheugenlek op vanwege het object ‘obj’, ondanks het feit dat hieraan de waarde null is toegewezen, aangezien Chrome interne verwijzingen naar de uitvoerobjecten opslaat voor latere inspectie in de webconsole . var obj = {}; console.log(obj); obj = nul;

Belangrijkste kenmerken van memlab:

  • Geheugenlekken in de browser detecteren. Met Memlab kunt u automatisch dynamische momentopnamen van de geheugenstatus vergelijken, geheugenlekken detecteren en de resultaten aggregeren.
  • Een objectgeoriënteerde API voor heap-iteratie, waarmee u uw eigen lekdetectie-algoritmen kunt implementeren en systemen kunt implementeren voor het analyseren van momentopnamen van de heap-status. Heap-analyse wordt ondersteund voor browsers die zijn gebaseerd op de Chromium-engine, evenals voor de Node.js-, Electron- en Hermes-platforms.
  • Commandoregelinterface en API voor het vinden van mogelijkheden om het geheugengebruik te optimaliseren.
  • Een assert-systeem voor Node.js waarmee u unit-tests kunt maken en programma's kunt uitvoeren op basis van Node.js om segmenten van uw eigen status te maken, uw geheugen te testen of uitgebreide assert-checks te schrijven.

Bron: opennet.ru

Voeg een reactie