Компиляция¶
Поскольку разработка ведется на TypeScript, то для запуска в браузере приложение должно быть предварительно обработано компилятором Angular, который конвертирует код исходных файлов в исполняемый JavaScript.
Механизм Angular compile реализован в двух режимах:
- JIT-компиляция (Just-in-TIme);
- AOT-компиляция (Ahead-of-Time).
В режиме JIT (используется по умолчанию) приложение компилируется в момент его запуска в браузере.
В режиме AOT компиляция происходит в момент сборки приложения. Для этого при выполнении некоторых CLI-команд необходимо указать флаг --aot
.
1 2 |
|
При сборке приложения с флагом --prod
AOT-компиляция используется по умолчанию.
Преимущества Angular AOT:
- Быстрая загрузка в браузере. Меньше времени тратится за счет того, что:
- Приложение компилируется до загрузки в браузер;
- В сборку не включается компилятор Angular и, как следствие, конечные файлы имеют меньший размер;
- Выполняется меньше AJAX-запросов на получение исходных HTML- и CSS-файлов, поскольку они включаются в строковом виде в файлы JavaScript.
- Обнаружение ошибок при сборке. Имеется возможность исправить все ошибки до запуска приложения в режиме эксплуатации.
- Повышенная безопасность.Поскольку HTML- и CSS-файлы включаются в процессе Angular compile в файлы JavaScript, то нет возможности просмотреть шаблоны, что снижает риск осуществления атак.
В режиме AOT нельзя использовать в конфигурационных объектах декораторов стрелочные функции.
Компиляцию Angular AOT можно разделить на три стадии:
- Анализ. В процессе анализа формируются данные, необходимые для генерации кода. Это файлы определения типов (
*.d.ts
) и файлы, содержащие информацию о метаданных, указанных в декораторах (*.metadata.json
). Также процесс анализа включает в себя некоторую оптимизацию кода. - Генерация кода. На этой стадии интерпретируются все файлы, сгенерированные на стадии анализа. Отдельно стоит упомянуть проверку модификаторов доступа свойств классов. Например, если свойство определено как
private
и используется в шаблоне, то будет сгенерирована соответствующая ошибка. - Валидация. На стадии валидации компилятор шаблонов использует компилятор TypeScript для проверки правильности использования свойств и методов компонентов и сервисов в шаблонах.
Как видно, AOT-компиляция имеет гораздо больше преимуществ перед JIT-компиляцией. Но сборка Angular AOT занимает гораздо больше времени. Поэтому рекомендуется при разработке использовать режим JIT, а для сборки версии и последующего ее развертывания — AOT.