Что такое JIT и AOT компиляция
Что проверяют
Понимаете ли вы, когда именно делается работа: на машине сборки или в браузере пользователя, и кто за неё платит. Для фронтенда вопрос сугубо практический, от ответа зависят размер бандла и скорость первой отрисовки.
Как отвечать
AOT это компиляция заранее, до запуска; JIT это компиляция во время работы программы. Во фронтенде обе встречаются сразу на двух уровнях, и полезно их развести.
Уровень фреймворка. Шаблоны компонентов превращаются в JavaScript. При AOT это делает сборка: в бандл едет готовый код рендеринга, ошибки в шаблонах видны на этапе сборки, сам компилятор шаблонов в браузер не отправляется. При JIT компилятор кладут в бандл, и он разбирает шаблоны при старте страницы, то есть пользователь ждёт лишнюю работу. Поэтому продакшен-сборка Angular сегодня всегда AOT, а Svelte и вовсе превращает компоненты в обычный код на этапе сборки.
Уровень движка. Движок JavaScript сам по себе JIT: он начинает с интерпретации, профилирует горячие функции и компилирует их в машинный код с предположениями о типах. Нарушилось предположение, происходит деоптимизация и возврат на медленный путь. Отсюда практический вывод: держите форму объектов и типы аргументов стабильными.
Размен простой: AOT даёт быстрый и предсказуемый старт, JIT умеет оптимизировать по фактическим данным, но платит прогревом и памятью.
Где спотыкаются
Говорят, что AOT отдаёт браузеру готовый машинный код. Ничего подобного: с фронтенда уезжает обычный JavaScript, просто шаблоны уже превращены в код, а машинный код в любом случае порождает движок у пользователя.
Смешивают компиляцию шаблонов со сборкой вообще. Минификация, разбиение на чанки и транспиляция это тоже работа сборщика, но к выбору между AOT и JIT отношения не имеют, и стоит уточнить, про какой уровень спрашивают.
Переносят выводы из мира виртуальных машин на страницу без замеров. На короткой сессии прогрев просто не успевает случиться, а на долгоживущем приложении важнее отсутствие деоптимизаций; вывод делают по профилю в инструментах разработчика, а не по общему рассуждению.