Перейти к содержимому
Skein

js-engine

Внутренности движка JavaScript

Как V8 исполняет твой код — парсинг, байткод, скрытые классы, JIT, сборка мусора и как оставаться быстрым.

10 юнитов·41 уроков·~10 ч

Начать трек →
00

С нуля

Что такое движок JS и почему его внутренности решают скорость приложения.
01

Как исполняется JS

Исходник → AST → байткод, который исполняет интерпретатор, ещё до JIT.
02

Значения и память

Как движок упаковывает числа, указатели и объекты в машинные слова.
03

Скрытые классы и IC

Объекты одной формы делят скрытый класс — это и ускоряет доступ к свойствам.
04

JIT

Движок спекулирует на типах, компилирует горячий код и деоптимизирует при ошибке.
05

Замыкания и область видимости

Замыкания захватывают область в heap-контексты — с реальной ценой.
06

Сборка мусора

Поколенческий GC ставит на то, что объекты умирают молодыми — невидим, пока не станет проблемой.
07

Async вглубь

Event loop, микрозадачи и внутренности промисов, решающие порядок исполнения.
08

Замеры и оптимизация

Используй трейсы движка, чтобы держать код мономорфным и дружелюбным к JIT.
09

Собираем вместе

Профилируй и оптимизируй реальный hot path со знанием движка.

Проекты по этому треку

Guided-проекты, которые закрепляют изученное здесь.

◆ Проекты

Лаборатория профилирования горячего пути

Возьми заведомо медленный кусок JavaScript и преврати его в управляемый эксперимент. Ты соберёшь микробенчмарк, которому действительно можно верить, отпрофилируешь горячий путь так, чтобы суметь назвать, что именно делает движок, и применишь оптимизации с учётом устройства движка — мономорфизм, устранение мегаморфных точек вызова, сокращение аллокаций — доказывая каждый выигрыш цифрами, а не ощущениями. Это вся дисциплина работы над производительностью в миниатюре: измерь, выдвини гипотезу о движке, измени одну вещь, измерь снова.

◆ Проекты

JSON-парсер с нуля

Напиши рекурсивно-нисходящий парсер JSON по спецификации — токенизатор, диспетчер значений, обработчик escape-последовательностей, декодер чисел — и наблюдай, как каждый крайний случай RFC 8259 превращается в конкретный путь в коде.

◆ Проекты

Движок регулярных выражений

Собери движок регулярных выражений с нуля через конструкцию Томпсона и симуляцию подмножества состояний — тот же метод, что делает grep и re2 иммунными к катастрофическому обратному ходу.

◆ Проекты

Мини-сигналы

Собери реактивную библиотеку сигналов примерно в 100 строк (signal/computed/effect) с автоматическим отслеживанием зависимостей и безглючными батч-обновлениями — та же модель, что лежит в основе Solid, Preact Signals и Vue 3.

◆ Проекты

Текстовый diff — алгоритм Майерса

Реализуй алгоритм diff Майерса с нуля: вычисли наибольшую общую подпоследовательность, построй edit script обратным ходом, докажи минимальность и применяй патчи так, чтобы любой round-trip был побайтово точным.

Следующий трек

Система типов TypeScript вглубь

От структурной типизации до программирования на типах — дженерики, условные и отображённые типы, типизация реальных систем.