Facebookin avoimen lähdekoodin kehys muistivuotojen havaitsemiseksi JavaScriptissä

Facebook (kielletty Venäjän federaatiossa) on avannut memlab-työkalupaketin lähdekoodin, joka on suunniteltu analysoimaan osia dynaamisesti varatun muistin tilasta, määrittämään strategioita muistinhallinnan optimoimiseksi ja tunnistamaan muistivuotoja, joita esiintyy suoritettaessa koodia JavaScript. Koodi on avoinna MIT-lisenssillä.

Kehys luotiin analysoimaan suuren muistinkulutuksen syitä työskennellessäsi verkkosivustojen ja verkkosovellusten kanssa. Esimerkiksi memlabilla analysoitiin muistin kulutusta Facebook.com-sivuston uudessa versiossa, jolloin pystyttiin tunnistamaan vuodot, jotka johtivat selaimen kaatumiseen asiakaspuolella vapaan muistin ehtymisen vuoksi.

Muistivuotojen syynä JavaScript-koodia suoritettaessa voivat olla piilotetut objektiviittaukset, jotka estävät roskankerääjää vapauttamasta objektin varaamaa muistia, arvojen järjetön välimuisti tai äärettömän vierityksen toteuttaminen poistamatta vanhoja luetteloelementtejä. Esimerkiksi alla olevassa Chromen koodissa tapahtuu muistivuoto objektin "obj" takia huolimatta siitä, että sille on määritetty arvo null, koska Chrome tallentaa sisäiset viittaukset tulosobjekteihin myöhempää tarkastelua varten verkkokonsoliin. . var obj = {}; console.log(obj); obj = nolla;

Memlabin pääominaisuudet:

  • Muistivuotojen havaitseminen selaimessa. Memlabin avulla voit automaattisesti verrata dynaamisia muistitilan tilannekuvia, havaita muistivuotoja ja koota tuloksia.
  • Olio-sovellusliittymä keon iterointiin, jonka avulla voit toteuttaa omia vuotojen havaitsemisalgoritmeja ja toteuttaa järjestelmiä keon tilan tilannekuvien analysoimiseksi. Keon analysointia tuetaan Chromium-moottoriin perustuvissa selaimissa sekä Node.js-, Electron- ja Hermes-alustoissa.
  • Komentorivikäyttöliittymä ja API muistin käytön optimointimahdollisuuksien löytämiseen.
  • Node.js:n vahvistusjärjestelmä, jonka avulla voit luoda yksikkötestejä ja ajaa Node.js:ään perustuvia ohjelmia oman tilasi osien luomiseksi, muistin testaamiseksi tai laajennetun vahvistustarkistuksen kirjoittamiseksi.

Lähde: opennet.ru

Lisää kommentti