V8 использует Just-In-Time (JIT) компиляцию, чтобы конвертировать часто выполняемые ("горячие") пути кода JavaScript прямо в оптимизированный машинный код во время выполнения, вместо того чтобы интерпретировать его строка за строкой.
V8 внутренне присваивает каждому объекту hidden class для отслеживания его формы — набора свойств и их типов. Когда ты создаёшь объекты с одинаковой структурой, они делят один hidden class, позволяя V8 делать быстрые предположения о расположении памяти.
// Оба объекта делят один и тот же hidden class
const a = { x: 1, y: 2 };
const b = { x: 3, y: 4 };
Динамическое добавление свойств или их добавление в непоследовательном порядке заставляет V8 создавать новые hidden classes, нарушая эту оптимизацию.
Inline caching ускоряет доступ к свойствам, запоминая hidden class и смещение памяти свойства после первого поиска. При последующих обращениях V8 полностью пропускает поиск и читает значение напрямую.
Когда предположения V8 нарушаются — например, при изменении типа или неожиданном добавлении свойства — движок запускает deoptimization, отбрасывая оптимизированный машинный код и возвращаясь на более медленный интерпретируемый путь.
Скрытые классы в V8 автоматически создаются для каждого отдельного экземпляра объекта, независимо от того, совпадает ли структура свойств у разных объектов.
Новый — ещё не проверен сообществом
Вы