Facebook (forbudt i Rusland) har åbnet kildekoden til værktøjet memlab, der er designet til at analysere tildelinger af dynamisk hukommelse (heap), bestemme strategier til optimering af hukommelsesforbrug og identificere hukommelseslækager, der opstår ved udførelse af kode skrevet i JavaScript. Koden er offentliggjort under MIT-licensen.
Frameworket blev oprettet for at undersøge årsagerne til højt hukommelseskonsumption ved arbejde med hjemmesider og webapplikationer. For eksempel blev memlab brugt til at analysere hukommelsesforbruget ved brug af den nye version af Facebook.com, hvilket gjorde det muligt at identificere lækager, der førte til, at browseren crashede på klientsiden på grund af udtømning af ledig hukommelse.
Årsagerne til hukommelseslækager ved udførelse af JavaScript-kode kan være skjulte referencer til objekter, som forhindrer garbage collector i at frigive den hukommelse, som objektet bruger, ufornuftig caching af værdier eller implementering af uendelig scrolling uden at fjerne gamle listelementer. For eksempel i koden nedenfor opstår der hukommelseslækage i Chrome på grund af objektet "obj", selvom det sættes til null, da Chrome gemmer interne referencer til de udskrivne objekter for at give mulighed for efterfølgende inspektion i webkonsollen. var obj = {}; console.log(obj); obj = null;
Hovedfunktioner i memlab:
- Identifikation af hukommelseslækager i browseren. Memlab gør det muligt automatisk at sammenligne snapshots af dynamisk hukommelsesstatus, identificere hukommelseslækager og aggregere resultater.
- Objektorienteret API til iteration over heap, der muliggør implementering af egne algoritmer til opdagelse af lækager og realisering af systemer til analyse af heap snapshots. Analyse af heap understøttes for browsere baseret på Chromium-motoren samt for Node.js-, Electron- og Hermes-platforme.
- Kommandolinjeinterface og API til at finde muligheder for at optimere hukommelsesforbruget.
- Assert-system til Node.js, der giver mulighed for at oprette enhedstest og køre programmer baseret på Node.js for at tage snapshots af sin egen tilstand, kontrollere sin hukommelse eller skrive udvidede assert-kontroller.
Kilde: opennet.ru
