Есть ли преимущество использования JIT-компиляции в Angular в пользу использования AOT? - PullRequest
0 голосов
/ 28 июня 2019

В угловых документах указано несколько причин использования компиляции 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 (с использованием AOT) все было хорошо. Это удивило меня, так как я никогда не сталкивался с проблемой угловой компиляции, в которой сборка продукта завершилась успешно , а сборка dev завершилась неудачей .

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

1 Ответ

2 голосов
/ 28 июня 2019

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

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

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

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

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

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

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

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

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

...