AOT

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

Компилятор «из коробки» в AngularJS и Angular называется JiT (Just-in-Time) компилятором. Что касается AoT, то это означает компилятор Ahead-of-Time, который был недавно представлен в Angular. По сравнению с компиляцией JiT, которая выполнятся в браузере, AoT предоставляет меньший bundle с более быстрым рендерингом в браузере.

Зачем собирать в режиме AoT?:

  • быстрее рендеринг – c помощью AoT браузер загружает предварительно скомпилированную версию приложения.
  • меньшее количество асинхронных запросов – компилятор встраивает внешние html-шаблоны и таблицы стилей css в приложение, устраняя отдельные запросы ajax для этих исходных файлов.
  • размер загружаемого файла меньшего – нет необходимости загружать компилятор, если приложение уже скомпилировано. Компилятор составляет примерно половину самого Angular, поэтому его пропуск значительно снижает полезную нагрузку приложения.
  • обнаружение ошибок шаблона – компилятор AoT обнаруживает и сообщает об ошибках шаблона во время этапа сборки, прежде чем пользователи смогут их увидеть.
  • улучшенная безопасность – AoT компилирует html-шаблоны и компоненты в файлы javascript задолго до того, как они будут отправлены клиенту, что уменьшает возможности для инъекционных атак.

Однако AoT не совершенен. Основное ограничение заключается в том, что AoT, из-за того, как он компилирует исходный код, нельзя использовать с общепринятыми практиками, например, экспорт по умолчанию из модулей, литералы шаблонов и функции в провайдерах, роутерах или declarations.

Другая проблема с AoT заключается в том, что когда приложение достигает определенной сложности, пакет AoT по сравнению с JiT bundle фактически может занимать больше места. Как компромисс ради простой логики для браузера (поэтому и большая скорость рендеринга), код, сгенерированный AoT, на самом деле более многословный по сравнению с «динамическим» JiT.

AoT конфигурация

В angular2-webpack-starter уже все настроено. Нужно только запустить командой npm run build:aot. Но мы рассмотрим механизм более детально.

Во-первых, скачайте ngc-webpack из npm и сохраните его как зависимость разработки:

npm install -D ngc-webpack

Затем в файле конфигурации webpack добавляем:

plugins: [
   ...
   new ngcWebpack.NgcWebpackPlugin({
       disabled: !AOT,
       tsConfig: helpers.root('tsconfig.webpack.json'),
       resourceOverride: helpers.root('config/resource-override.js')
   })
]

results matching ""

    No results matching ""