L'azienda Facebook (vietata in RF) ha rilasciato i codici sorgente dello strumento memlab, destinato all'analisi degli stati della memoria dinamicamente allocata (heap), alla definizione di strategie per l'ottimizzazione dell'uso della memoria e all'individuazione delle perdite di memoria che si verificano durante l'esecuzione di codice in linguaggio JavaScript. Il codice è rilasciato con licenza MIT.
Il framework è stato creato per analizzare le cause dell'elevato consumo di memoria durante l'uso di siti web e applicazioni web. Ad esempio, con memlab è stata condotta un'analisi del consumo di memoria con la nuova versione del sito Facebook.com, che ha permesso di identificare perdite che portavano a crash del browser sul lato client a causa dell'esaurimento della memoria disponibile.
Le cause delle perdite di memoria durante l'esecuzione del codice JavaScript possono essere riferite alla presenza di riferimenti nascosti a oggetti, per i quali il garbage collector non può liberare la memoria occupata dall'oggetto, a un caching irrazionale dei valori o all'implementazione di uno scroll infinito senza espellere i vecchi elementi della lista. Ad esempio, nel codice qui sotto, in Chrome, si verifica una perdita di memoria a causa dell'oggetto "obj", nonostante venga assegnato il valore null, poiché Chrome conserva riferimenti interni agli oggetti visualizzati per consentire il successivo ispezionamento nella console web. var obj = {}; console.log(obj); obj = null;
Le principali funzionalità di memlab:
- Individuazione di perdite di memoria nel browser. Memlab consente di confrontare automaticamente i snapshot dello stato della memoria dinamica, di identificare perdite di memoria e di aggregare i risultati.
- API orientata agli oggetti per l'iterazione sull'heap, che consente di implementare algoritmi personalizzati per l'individuazione di perdite e di realizzare sistemi di analisi degli snapshot dello stato dell'heap. È supportata l'analisi dell'heap per i browser basati sul motore Chromium, nonché per le piattaforme Node.js, Electron e Hermes.
- Interfaccia a riga di comando e API per la ricerca di opportunità di ottimizzazione dell'uso della memoria.
- Sistema di assert per Node.js, che consente di creare unit test ed eseguire programmi basati su Node.js per la creazione di snapshot del proprio stato, la verifica della propria memoria o la scrittura di assert avanzati.
Fonte: opennet.ru
