L'azienda Facebook (vietata in RF) ha reso pubblici i codici sorgente dello strumento memlab, progettato per analizzare gli istantanei dello stato della memoria dinamicamente allocata (heap), determinare strategie di ottimizzazione dell'uso della memoria e identificare perdite di memoria che si verificano durante l'esecuzione di codice JavaScript. Il codice è rilasciato sotto licenza MIT.
Il framework è stato creato per analizzare le ragioni di un elevato consumo di memoria durante l'uso di siti web e applicazioni web. Ad esempio, memlab è stato utilizzato per analizzare il consumo di memoria nella nuova versione del sito Facebook.com, che ha permesso di identificare perdite che causavano il 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 includere riferimenti nascosti a oggetti, che impediscono al garbage collector di liberare la memoria occupata dall'oggetto, caching irrazionale dei valori, o l'implementazione dello scrolling infinito senza rimuovere i vecchi elementi dalla 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 mantiene riferimenti interni agli oggetti visualizzati per fornire la possibilità di ispezionarli successivamente nella console web. var obj = {}; console.log(obj); obj = null;
Le principali funzionalità di memlab:
- Identificazione delle perdite di memoria nel browser. Memlab consente di confrontare automaticamente gli istantanei dello stato della memoria dinamica, identificare le perdite di memoria e aggregare i risultati.
- API orientata agli oggetti per l'iterazione dell'heap, che consente di implementare algoritmi personalizzati per l'identificazione delle perdite e realizzare sistemi di analisi degli istantanei dello stato dell'heap. L'analisi dell'heap è supportata per i browser basati sul motore Chromium, oltre che per le piattaforme Node.js, Electron e Hermes.
- Interfaccia a riga di comando e API per trovare 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 creare istantanei del proprio stato, verificare la propria memoria o scrivere assert avanzati.
Fonte: opennet.ru
