Есть ли преимущество использования 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 также оптимизирует размер вашего приложения, так как все файлы будут скомпилированы перед его запуском.