Есть ли преимущество использования JIT-компиляции в Angular в пользу использования AOT?

Документы Angular указывают несколько причин использования компиляции AOT в пользу JIT:

  • Более быстрый рендеринг
  • Меньше асинхронных запросов
  • Меньший угловой размер загрузки
  • Обнаружить ошибки шаблона ранее
  • Лучшая безопасность

Однако при поиске аргументов для использования JIT я не нашел ни одного. Более того, после обновления с Angular 5.2 до Angular 8 я неожиданно получаю странную ошибку при запуске сборки dev (используя JIT). Ошибка:

ERROR in ./src/app/shared/app-configuration/shared/app-configuration.model.ts 22:16-35
"export 'IMyComponents' was not found in '@mycompany/mypackage'

При запуске prod build (используя AOT) все было хорошо. Это удивило меня, так как я никогда не сталкивался с проблемой компиляции Angular, в которой сборка prod завершилась успешно, а сборка dev завершилась неудачно.

Таким образом, я предполагаю, что JIT подходит только для разработки сборки (то есть скорость). И добавление флага --aot может быть безопасно выполнено без каких-либо проблем. Или я что-то упустил?

1 ответ

Решение

Вы правы, Angular предлагает 2 способа привязки вашего приложения:

Just-in-Time (JIT), который компилирует ваше приложение в браузере во время выполнения. (когда вы бежите ng serve)

  • Скомпилировано в браузере
  • Каждый файл составлен отдельно
  • Нет необходимости строить после изменения кода и перед перезагрузкой страницы браузера.
  • Подходит для местного развития

Ahead-of-Time (AOT), которая компилирует ваше приложение во время сборки. (когда вы бежите ng serve --aot=true)

  • Скомпилировано самой машиной через командную строку (Faster)
  • Весь код собран вместе, встраивая HTML/CSS в скрипты
  • Нет необходимости развертывать компилятор
  • Подходит для производственных сборок

Команда ng build с мета-флагом --prod (ng build --prod) компилируется с AOT по умолчанию.

Компилятор Angular Ahead-of-Time (AOT) преобразует ваш код Angular HTML и TypeScript в эффективный код JavaScript на этапе сборки, прежде чем браузер загрузит и выполнит этот код. Компиляция приложения во время процесса сборки обеспечивает более быструю визуализацию в браузере.

Поскольку JIT компилирует ваше приложение во время выполнения, оно может оптимизировать компиляцию и создавать только необходимый код. Таким образом, в режиме разработки обычно используется JIT, чтобы сэкономить время полной сборки. Время компиляции будет быстрее с использованием JIT.

AOT оптимизирует скорость работы, но время компиляции больше, поэтому его часто используют в производстве. AOT также оптимизирует размер вашего приложения, так как все файлы будут скомпилированы перед его запуском.

Другие вопросы по тегам