Подтвердить что ты не робот

Angular 2: компиляция Just-in-Time (JiT) против Ahead (время от времени)

Я ссылался на эту документацию и натолкнулся на концепцию компиляции. Можно использовать компиляцию JIT или AOT. Тем не менее, я нашел это очень кратким и должен знать следующие моменты в деталях,

  • Различия между этими двумя методами
  • Рекомендация о том, когда следует использовать
4b9b3361

Ответ 1

JIT - Скомпилируйте TypeScript как раз вовремя для его выполнения.

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

AOT - Скомпилируйте TypeScript во время фазы сборки.

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

Ответ 2

Хотя есть несколько ответов, но я хотел бы добавить некоторые из моих выводов, потому что я был действительно смущен тем, что на самом деле компилируется, как и во всех случаях, TSJS конверсия происходит. Я использую некоторые из блога Джеффа в качестве ссылки.

JIT

Код TS, написанный разработчиком, компилируется в код JS. Теперь этот скомпилированный код js снова скомпилирован браузером, так что html может отображаться динамически в соответствии с действиями пользователя, и соответственно коды для angular (для компонентов, обнаружение изменений, внедрение зависимостей) также генерируются во время выполнения.,

(Компилятор браузера - это то, что принимает директивы и компоненты приложений вместе с соответствующими им HTML и CSS и создает фабрики компонентов, чтобы быстро исключать экземпляры со всей их логикой создания представлений.)

Когда приложение Angular 2 загружается в браузере, JIT-компилятор выполняет большую работу по анализу компонентов в приложении во время выполнения и генерации кода в памяти. Когда страница обновляется, вся проделанная работа отбрасывается, и JIT-компилятор выполняет эту работу заново.

АОТ

Код TS, написанный разработчиком, скомпилирован в код JS,этот js  уже был скомпилирован и для angular. Теперь этот скомпилированный код js снова компилируется браузером, чтобы можно было отобразить html. Но прикол в том, что функции angular уже были учтены компилятором AOT, и поэтому браузеру не нужно сильно беспокоиться о создании компонентов, обнаружении изменений, внедрении зависимостей. Итак, у нас есть:

Более быстрый рендеринг

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

Меньше асинхронных запросов

Компилятор вставляет внешние шаблоны HTML и таблицы стилей CSS в JavaScript приложения, исключая отдельные запросы Ajax для этих исходных файлов.

Меньший angular размер загрузки

Нет необходимости загружать компилятор Angular, если приложение уже скомпилировано. Компилятор составляет примерно половину самого Angular, поэтому его пропуск значительно снижает полезную нагрузку приложения.

Обнаружение ошибок шаблона ранее

Компилятор AOT обнаруживает и сообщает об ошибках привязки шаблона на этапе сборки, прежде чем пользователи смогут их увидеть.

Лучшая безопасность

AOT компилирует HTML-шаблоны и компоненты в файлы JavaScript задолго до того, как они будут переданы клиенту. Отсутствие шаблонов для чтения и рискованная оценка HTML или JavaScript на стороне клиента дает меньше возможностей для инъекционных атак.


Остальные различия уже охвачены пунктами марки Benyamin, Nisar & Гауранг.

Не стесняйтесь поправлять меня

Ответ 3

Беньямин и Нисар упомянул здесь несколько хороших моментов. Я добавлю к этому.

Хотя теоретически AOT выглядит привлекательным вариантом, чем JIT для производственных целей, но у меня было сомнение в том, действительно ли AOT стоит!

Хорошо, я нашел отличную статистику Jeff Cross, и это доказывает, что AOT значительно сокращает время загрузки приложения. Ниже привязки из сообщения Джеффа Кросса даст вам краткое представление об этом,

введите описание изображения здесь

Ответ 4

JiT (как раз вовремя) сборник

Само название описывает работу, оно компилирует код как раз во время загрузки страницы в браузере. Браузер загрузит компилятор, создаст код приложения и отобразит его.

Это будет хорошо для среды разработки.

AoT (опережающий время) сборник

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

Может использоваться в производственной среде

Мы можем сравнить компиляцию JiT и AoT, как показано ниже

enter image description here

Ответ 5

JIT (сборник "точно в срок")

enter image description here

AOT (опережающая компиляция)

enter image description here

Ответ 6

В конце дня AOT (опережая время) и JIT (точно вовремя) делают одно и то же. Они оба компилируют ваш Angular-код, чтобы он мог работать в собственной среде (то есть в браузере). Основное различие заключается в том, когда происходит компиляция. С помощью AOT ваш код компилируется перед загрузкой приложения в браузер. С JIT ваш код компилируется во время выполнения в браузере.

Вот сравнение: enter image description here

Преимущества AOT:

  • Ускоренный запуск, поскольку в браузере не выполняется синтаксический анализ и компиляция.
  • Шаблоны проверяются во время разработки (что означает, что все ошибки, которые мы видим в консоли javascript в запущенных приложениях, в противном случае будут возникать в процессе сборки).
  • Меньший размер файла, поскольку неиспользуемые компоненты могут быть удалены, а сам компилятор не поставляется.

Ответ 7

На самом деле существует только один компилятор Angular. Разница между AOT и JIT - это вопрос времени и оснастки. С AOT компилятор запускается один раз во время сборки с использованием одного набора библиотек; с JIT он запускается каждый раз для каждого пользователя во время выполнения с использованием другого набора библиотек.