Сборка V8 локально
Чтобы понимать, как реально работает оптимизатор, нужно собрать d8 — standalone V8 shell — и гонять в нём байт-код, машинный код, deopt-логи. Установка через
depot_tools+gn+ninja.
Установка depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:/path/to/depot_tools
Сборка V8
mkdir v8 && cd v8
fetch v8
cd v8
gclient sync
# Debug-сборка с native syntax
gn gen out/debug --args='is_debug=true v8_enable_disassembler=true'
ninja -C out/debug d8
./out/debug/d8 --allow-natives-syntax script.js
Полезные флаги d8
d8 --print-bytecode # байт-код функций
d8 --print-opt-code # машинный код оптимизированных функций
d8 --print-code # вообще весь код
d8 --trace-opt --trace-deopt # лог оптимизаций/деоптов
d8 --trace-ic # переходы inline cache
d8 --allow-natives-syntax # включить %functions
Подводные камни
- Сборка занимает ~30-60 минут на первом запуске.
- Размер ~10-15 GB на диск.
- Для Windows проще использовать готовые сборки через
jsvu. - В Node всё то же доступно через
--print-bytecodeи--trace-opt.
jsvu — простая альтернатива
npm install -g jsvu
jsvu # выбрать v8, spidermonkey, jsc
v8 --print-bytecode script.js
Источники
- JavaScript инструменты Как запускать сборку V8 (devices01) · AsForJS · 2023-12-01