2015-11-19 34 views
8

Próbuję zrozumieć zawartość sterty wygenerowanej przez narzędzia Google Chrome. Rozumiem, że istnieje już inspektor zrzutu sterty w przeglądarce, ale jestem zainteresowany pisaniem interfejsu CLI, który analizuje zrzut sterty JS jako ćwiczenie. Nie mogę znaleźć żadnych dokumentów dotyczących struktury zawartości wewnątrz zrzutu sterty. Są czytelnej ale format nie jest bardzo jasne z inspekcji plikSchemat sterty zrzutów V8 JavaScript

Oto losowo fragment:

"HTMLOptionElement", 
"XMLHttpRequestEventTarget", 
"about:blank", 
"clearModifier", 
"resetModifiers", 
"/devtools/docs/demos/memory/example1", 
"HTMLIFrameElement", 
"https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22search%22%2C%22version%22%3A%221.0%22%2C%22callback%22%3A%22__gcse.scb%22%2C%22style%22%3A%22https%3A%2F%2Fwww.google.com%2Fcse%2Fstyle%2Flook%2Fv2%2Fdefault.css%22%2C%22language%22%3A%22en%22%7D%5D%7D", 
"HTMLLinkElement", 
"HTMLContentElement", 
"window.__SSR = {c: 1.2808007E7 ,si:1,su:1,e:'[email protected]',dn:'Richard Schneeman',a:'bubble',at:'AZW7SXV+1uUcQX+2WIzyelLB5UgBepsr1\\/RV+URJxwIT6BmLmrrThMH0ckzB7mLeFn1SFRtxm\\/1SD16uNnjb0qZxXct8\\x3d',ld:[,[0,12808007,[]\n,1,70]\n]\n,r:'https:\\/\\/developer.chrome.com\\/devtools\\/docs\\/demos\\/memory\\/example1',s:'widget',annd: 2.0 ,bp: {}, id:'http:\\/\\/www.google.com\\/chrome'}; document.addEventListener && document.addEventListener('DOMContentLoaded', function() {gapi.inline.tick('wdc', new Date().getTime());}, false);", 
"onLoaded", 
"HTMLAllCollection", 
"onDocumentKeyDown", 

zrobić docs dotyczące struktury chromu istnieje wysypisk kupie? Czy istnieje standardowy zrzut zrzutów sterty javascript, czy też każdy silnik ma swój własny prawny standard?

+1

Niestety nie ma czegoś takiego jak standardowy format sterty JS. Szybkie wyszukiwanie go dla "formatu zrzutu sterty v8" daje kilka wyników, żaden z nich nie jest bardzo szczegółowy. Jest rozszerzenie node.js: https://www.npmjs.com/package/heapsnapshot-parser, a kod źródłowy v8 zawiera najbardziej aktualne informacje: https://github.com/v8/v8/blob/ master/include/v8-profiler.h – smirnoff

+0

Dzięki, zdałem sobie sprawę po opublikowaniu, że patrząc na źródło była opcja. Jestem nowy w projekcie, doceniam linki. – Schneems

Odpowiedz

-1

Doskonałe pytania! Z kolei:

  1. Czy istnieją dokumenty dotyczące struktury zrzutów sterty chromu?

Tak! Google Devs doc How to Record Heap Snapshots opisuje zawartość zrzutu sterty:

  • Konstruktor reprezentuje wszystkie obiekty utworzone za pomocą tego konstruktora.
  • Liczba instancji obiektu jest wyświetlana w kolumnie #.
  • Płytka rozmiar kolumna wyświetla sumę płytkich rozmiarów wszystkich obiektów - utworzonych przez określoną funkcję konstruktora. Płytki rozmiar jest wielkością pamięci przechowywanej przez sam obiekt (generalnie, łańcuchy i łańcuchy mają większe rozmiary płytkie). Zobacz także Object sizes.
  • Zatrzymany rozmiar Kolumna wyświetla maksymalny zachowany rozmiar w tym samym zestawie obiektów. Rozmiar pamięci, która może zostać zwolniona po usunięciu obiektu (a ta zależność od niego nie była już dostępna) nazywana jest zachowanym rozmiarem. Zobacz także Object sizes.
  • Odległość wyświetla odległość do katalogu głównego za pomocą najkrótszej prostej ścieżki węzłów.

A oto Chrome Dev Tools zrzut stosu tej samej stronie, które są wyświetlane w formie tabeli:

Sample Chrome Dev tools Heap Dump

Zauważysz schematu luźno opiera się na strukturze cytowany dokumentacja:

  • Odległość
  • Przedmioty hrabia
  • Płytki Rozmiar
  • zatrzymane Rozmiar

Następnie, zapytał:

  1. Czy istnieje norma javascript Format zrzut stosu lub nie każdy silnik mają swoje własne zastrzeżony standard?

Nie, nie ma standardowego formatu zrzutu sterty od września 2016 roku. Każdy silnik ma swój własny format, ponieważ format zrzutu sterty każdego silnika odzwierciedla jego strukturę sterty, która jest zależna od schematu zarządzania pamięcią, jak można się domyślić. Zauważ jednak, że w kontekście standaryzacji zrzutów dla nodejs jest aktywna dyskusja - open issue on Github.

  1. Domniemane pytanie: Dlaczego trudno zinterpretować zrzut sterty JS Engine do ładnego i zgrabnego schematu DB?

Ponieważ TO ŻYJE !!! tj. DOM jest płynny! Jest to struktura przypominająca drzewo, która może drastycznie zmienić się w każdej chwili! Wszelkie wahania zawartości zrzutu sterty odzwierciedlają to tylko i dlatego narzędzia do profilowania i analizy w Narzędziach Chrome Chrome są tak niesamowite - i bardzo pomocne!