Nemrégiben a hír ezt megszakította A Facebook úgy döntött, hogy kiadja a forráskódot a szerszámkészletből memlab, ami A memória állapotának egyes részeinek elemzésére tervezték dinamikusan allokálva (halom), meghatározza a memóriával végzett munka optimalizálásának stratégiáját, és észleli a memóriaszivárgást, ha JavaScript kód futtatása.
A keret azért jött létre, hogy elemezze a magas memóriafelhasználás okait amikor webhelyekkel és webes alkalmazásokkal dolgozik. Például a memlab-ot a memóriafelhasználás elemzésére használták a Facebook.com oldal új verziójának használatakor, amely olyan szivárgásokat tárt fel, amelyek kliensoldali böngésző összeomlását okozták a szabad memória kimerülése miatt.
A webalkalmazásainkat használó emberek gyakran azonnal észreveszik a teljesítménybeli problémákat és a funkcionális javításokat. A memóriavesztés azonban egy másik történet. Ez nem azonnal észrevehető, mert egyszerre egy darab memóriát foglal el, ami kihat a teljes webes munkamenetre, és lassabbá és kevésbé reagálóvá teszi a későbbi interakciókat.
Hogy segítsünk fejlesztőinknek ennek megoldásában, létrehoztuk a MemLab JavaScript-memóriatesztelő keretrendszert, amely automatizálja a szivárgásészlelést, és megkönnyíti a memóriaszivárgások felkutatását. A MemLab on Meta segítségével sikeresen megfékeztük a fenntarthatatlan memórianövekedést, és azonosítottuk a memóriaszivárgásokat, valamint a memóriaoptimalizálási lehetőségeket termékeinkben és infrastruktúránkban.
A magas memóriahasználat statisztikailag szignifikáns és negatív hatással van az oldalbetöltésre és az interakciós teljesítményre (mennyi ideig tart egy oldal betöltése vagy interakció végrehajtása)
Felhasználói elköteleződési mutatók (aktív felhasználók, a helyszínen eltöltött idő, elvégzett tevékenységek száma)
A memóriazavarok okai JavaScript kód futtatásakor rejtett objektumhivatkozások jelenléte lehet, így a szemétgyűjtő nem tud memóriát felszabadítani az objektum által elfoglalt, az értékek indokolatlan gyorsítótárazása, vagy a végtelen görgetés megvalósítása a régi listaelemek kiürítése nélkül.
Például a következő Chrome-kódban a memóriaszivárgás az „obj” objektum miatt következik be, annak ellenére, hogy nullára van állítva, mivel a Chrome megtartja a belső hivatkozásokat a megjelenített objektumokra, hogy később ellenőrizni lehessen őket a webkonzolon.
A Memlab alapvető működése, a következő:
- Először memóriaszivárgás-észlelést végez a böngészőben, a Memlab lehetővé teszi a dinamikus memória-pillanatképek automatikus összehasonlítását, a memóriaszivárgás észlelését és az eredmények összesítését.
- Objektumorientált kupacbejárási API, amely lehetővé teszi saját szivárgásészlelési algoritmusok megvalósítását és rendszerek megvalósítását a kupac pillanatképeinek elemzéséhez. A kupacelemzést a Chromium-motoron alapuló böngészők, valamint a Node.js, Electron és Hermes platformok támogatják.
- Parancssori felület és API a memóriahasználat optimalizálásának lehetőségeinek megtalálásához.
- A Node.js állítási rendszere, amely lehetővé teszi egységtesztek létrehozását és Node.js-alapú programok futtatását saját állapotának felosztására, a memória tesztelésére vagy speciális állítások írására.
- A megőrzési nyomkövetés csoportosítása, a MemLab az összes megőrzési nyomot egybe csoportosítja, és egy nyomkövetést jelenít meg a hasonló megőrzési nyomokat megosztó szűrt objektumok minden csoportjához. A nyomkövetés olyan hibakeresési információkat is tartalmaz, mint például az uralkodó csomópontok és a megtartott méretek.
- A szivárgások jelentésével a MemLab rendszeres időközönként futtatható a nap folyamán, hogy folyamatos jelet kapjon a memória regressziójáról. Minden új regresszió hozzáadódik egy belső irányítópulthoz, ahol az összes észlelt memóriaszivárgás egyesített megőrzési nyomait összegyűjti és osztályozza. A fejlesztők ezután rákattinthatnak, és megtekinthetik az objektum tulajdonságait a tartási nyomkövetésben minden memóriaszivárgás esetén.
Végül ha érdekel, tudnia kell, hogy a Memlab kód nyílt forráskódú az MIT licence alatt, és többet megtudhat róla A következő linken.