Platforma Facebooka o otwartym kodzie źródłowym do wykrywania wycieków pamięci w JavaScript

Facebook (zakazany w Federacji Rosyjskiej) udostępnił kod źródłowy zestawu narzędzi memlab, przeznaczonego do analizowania wycinków stanu dynamicznie alokowanej pamięci (sterty), określania strategii optymalizacji zarządzania pamięcią oraz identyfikowania wycieków pamięci występujących podczas wykonywania kodu w JavaScript. Kod jest otwarty na licencji MIT.

Framework został stworzony w celu analizy przyczyn dużego zużycia pamięci podczas pracy ze stronami internetowymi i aplikacjami internetowymi. Przykładowo memlab został wykorzystany do analizy zużycia pamięci podczas korzystania z nowej wersji serwisu Facebook.com, co pozwoliło zidentyfikować wycieki, które doprowadziły do ​​awarii przeglądarki po stronie klienta z powodu wyczerpania się wolnej pamięci.

Przyczynami wycieków pamięci podczas wykonywania kodu JavaScript mogą być ukryte odniesienia do obiektów, które uniemożliwiają modułowi wyrzucania elementów bezużytecznych zwolnienie pamięci zajmowanej przez obiekt, nierozsądne buforowanie wartości lub implementacja nieskończonego przewijania bez eksmitowania starych elementów listy. Na przykład w poniższym kodzie w przeglądarce Chrome występuje wyciek pamięci z powodu obiektu „obj”, mimo że przypisano mu wartość null, ponieważ Chrome przechowuje wewnętrzne odniesienia do obiektów wyjściowych do późniejszej kontroli w konsoli internetowej . var obiekt = {}; konsola.log(obj); obj = null;

Główne cechy memlaba:

  • Wykrywanie wycieków pamięci w przeglądarce. Memlab umożliwia automatyczne porównywanie dynamicznych migawek stanu pamięci, wykrywanie wycieków pamięci i agregowanie wyników.
  • Obiektowe API do iteracji sterty, umożliwiające implementację własnych algorytmów wykrywania wycieków i wdrażanie systemów do analizy migawek stanu sterty. Analiza sterty obsługiwana jest dla przeglądarek opartych na silniku Chromium, a także dla platform Node.js, Electron i Hermes.
  • Interfejs wiersza poleceń i API do znajdowania możliwości optymalizacji wykorzystania pamięci.
  • System asercji dla Node.js, który umożliwia tworzenie testów jednostkowych i uruchamianie programów opartych na Node.js w celu tworzenia wycinków własnego stanu, testowania pamięci lub pisania rozszerzonych kontroli asercji.

Źródło: opennet.ru

Dodaj komentarz