Compania Facebook (interzisă în RF) a deschis codul sursă al instrumentului memlab, destinat analizei instantaneelor stării memoriei dinamice (heap), identificării strategiilor de optimizare a utilizării memoriei și detectării scurgerilor de memorie care apar la executarea codului în limbajul JavaScript. Codul este disponibil sub licența MIT.
Framework-ul a fost creat pentru a analiza cauzele unui consum mare de memorie în timpul utilizării site-urilor web și aplicațiilor web. De exemplu, cu ajutorul memlab a fost analizat consumul de memorie utilizat de noua versiune a site-ului Facebook.com, ceea ce a permis identificarea scurgerilor care duceau la închiderea neașteptată a browserului pe client din cauza epuizării memoriei libere.
Cauzele scurgerilor de memorie la executarea codului JavaScript pot fi legături ascunse către obiecte, din cauza cărora garbage collector-ul nu poate elibera memoria ocupată de obiect, caching nerezonabil al valorilor sau implementarea scrolling-ului infinit fără a elimina elementele vechi din listă. De exemplu, în codul de mai jos în Chrome, scurgerea de memorie apare din cauza obiectului „obj”, chiar dacă acesta i se atribuie valoarea null, deoarece Chrome păstrează referințe interne la obiectele afișate pentru a permite inspectarea acestora în consola web. var obj = {}; console.log(obj); obj = null;
Funcționalitățile principale ale memlab:
- Detectarea scurgerilor de memorie în browser. Memlab permite compararea automată a instantaneelor stării memoriei dinamice, identificarea scurgerilor de memorie și agregarea rezultatelor.
- API orientat pe obiect pentru parcurgerea heap-ului, care permite implementarea propriilor algoritmi de detectare a scurgerilor și realizarea sistemelor de analiza instantaneelor stării heap-ului. Este suportată analiza heap-ului pentru browserele bazate pe motorul Chromium, precum și pentru platformele Node.js, Electron și Hermes.
- Interfață de linie de comandă și API pentru căutarea oportunităților de optimizare a utilizării memoriei.
- Sistem de aserți pentru Node.js, care permite crearea de teste unitare și executarea programelor bazate pe Node.js pentru a crea instantanee ale propriei stări, pentru a verifica propria memorie sau pentru a scrie aserți extinși.
Sursa: opennet.ro
