La société Facebook (interdite en RF) a rendu public le code source de l'outil memlab, destiné à analyser les instantanés de l'état de la mémoire dynamique (tas), à définir une stratégie d'optimisation de la gestion de la mémoire et à détecter les fuites de mémoire survenant lors de l'exécution de code en JavaScript. Le code est ouvert sous licence MIT.
Le framework a été créé pour analyser les raisons d'une consommation élevée de mémoire lors de l'utilisation de sites web et d'applications web. Par exemple, memlab a été utilisé pour analyser la consommation de mémoire avec la nouvelle version du site Facebook.com, ce qui a permis de découvrir des fuites conduisant à un plantage du navigateur côté client à cause d'une mémoire épuisée.
Les causes des fuites de mémoire lors de l'exécution de code JavaScript peuvent être la présence de références cachées à des objets, empêchant le ramasse-miettes de libérer la mémoire occupée par l'objet, un cache des valeurs peu judicieux ou la mise en place d'un défilement infini sans éviction des anciens éléments de la liste. Par exemple, dans le code ci-dessous, dans Chrome, une fuite de mémoire se produit à cause de l'objet "obj", même si sa valeur est définie sur null, car Chrome conserve des références internes aux objets affichés pour permettre leur inspection ultérieure dans la console web. var obj = {}; console.log(obj); obj = null;
Fonctionnalités principales de memlab :
- Détection des fuites de mémoire dans le navigateur. Memlab permet de comparer automatiquement les instantanés de l'état de la mémoire dynamique, de détecter les fuites de mémoire et d'agréger les résultats.
- API orientée objet pour parcourir le tas, permettant de mettre en œuvre vos propres algorithmes de détection des fuites et de réaliser des systèmes d'analyse des instantanés de l'état du tas. L'analyse du tas est prise en charge pour les navigateurs basés sur le moteur Chromium, ainsi que pour les plateformes Node.js, Electron et Hermes.
- Interface en ligne de commande et API pour explorer les opportunités d'optimisation de la consommation de mémoire.
- Système d'assertions pour Node.js, permettant de créer des tests unitaires et d'exécuter des programmes basés sur Node.js pour créer des instantanés de son propre état, vérifier sa mémoire ou écrire des assertions étendues.
Source : opennet.ru
