Показать сообщение отдельно
  #1 (permalink)  
Старый 08.01.2013, 22:21
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

V8 нахождение деоптимизаций
Чтобы понимать, о чём суть, можно ознакомиться с этой статьёй.

Презентация об оптимизации компилирования JavaScript в V8

Думаю, все знают о том, как управлять качеством компилируемого JavaScript - наверняка это относится не только к V8, но и к FireFox'овским компилятором, которые он меняет через неск. версий (сейчас я про JIT компиляторы).

Вкратце, всё сводится к тому, чтобы как можно более статично писать код - т.е. не использовать разные типы для одной переменной, не добавлять новые свойства к объекту и т.д. ... короче, чтобы получить действительно быстрый JavaScript, нужно как-то особенно писать.

Тут то и возникает проблема. Вот вроде бы ты и написал, как "надо". Как теперь проверить, деоптимизируется ли функция? Вариант с бенчмарками отпадает, как самый примитивный.


Я немного пощупал V8 (точнее, Chrome, ну да ладно) на предмет логирования его действий при обработке моего скрипта.

Всё свелось к простейшему созданию особого ярлыка для Chrome, и перетаскиванию HTML-файла со скриптом на этот ярлык (я пока на виндовсе ) :
Код:
C:\Users\LOL\AppData\Local\Google\Chrome\Application\chrome.exe --no-sandbox 
--js-flags="--logfile=%t.log --trace-opt --trace-deopt  --noprof-lazy --prof-auto --log-gc"  
--incognito
Все эти флаги были бережно нагуглены:
Profiling Chromium With V8
Profiling Chromium With V8 №2

после этого в папке с chrome.dll появился файл лога, содержащий какие-то записи сумашедшего летописца.

Вроде я указал, что мне нужно записывать , но поиск по файлу ничего путёвого, кроме какого-то левого профилирования, не выдал.

Лог сам весит 211 кб Первое упоминание о моём файле аж на 656'й строке.

Код:
code-creation,Function,0x369363a0,7992," file:///E:/Max/melanim/dist/mel-anim.compiled.js:5",0x26828704,~
code-creation,Script,0x369382e0,208,"file:///E:/Max/melanim/dist/mel-anim.compiled.js",0x268287a8,~
Наверное, это начало разбора главного большого замыкания... интересно, что означают эти записи ?

ещё немного бреда :
Код:
code-creation,LoadIC,0x3693d660,98,"prefix"
code-creation,LoadIC,0x3693d660,98,"prefix"
code-creation,LoadIC,0x3693d6e0,98,"lowPrefix"
code-creation,LoadIC,0x3693d6e0,98,"lowPrefix"
code-creation,KeyedLoadIC,0x3693d760,110,"animation"
code-creation,KeyedLoadIC,0x3693d760,110,"animation
Что такое LoadIC? А KeyedLoadIC?

особенно интересны эти моменты :
Код:
code-creation,LazyCompile,0x36955160,232,"type.array file:///E:/Max/melanim/dist/mel-anim.compiled.js:73",0x268269a4,~
code-creation,LazyCompile,0x36955260,544,"type.array file:///E:/Max/melanim/dist/mel-anim.compiled.js:73",0x268269a4,*
Что означают разные символы на концах строк (~ и *)? что такое LazyCompile?

Короче, куча вопросов, и ответов нет. Попытки гугления при водят только к непонятной документации.

Я хотел найти deopt'ы. Где они ?) Кто-нибудь вообще занимался этим?
Ответить с цитированием