Обзор
хорошо известно,angular
Прежде чем приложение может быть выполнено,angular
Компоненты и шаблоны в приложении должны быть преобразованы в распознаваемые браузеромjavascript
код, и это преобразование выполняется черезangualr
выполняется собственным компилятором.
Angular предоставляет два метода компиляции, а именноAOT
(предварительно скомпилированный) иJIT
(даже если скомпилировано), гдеJIT
для метода компиляции по умолчанию
АОТ этоAhead of time
, относится к компиляции во время сборки, то есть компиляция завершается на стороне сервера.
JЭтоJust-in-Time
, компилирует приложение во время выполнения, то есть при загрузке приложения.
AOT vs JIT
На самом деле компилятор всего один, разница между ними только во времени и инструментах компиляции
JIT-компиляция приводит к снижению производительности во время выполнения. Из-за этого процесса компиляции в браузере отображение представления занимает больше времени. Так как приложение содержит компилятор Angular и много библиотечного кода, который на самом деле не нужен, размер файла также будет больше. Большие приложения загружаются дольше и загружаются медленнее.
Компиляция может обнаружить некоторые ошибки привязки шаблона компонента. JIT-компиляция раскрывает их во время выполнения, что слишком поздно.
Предварительно скомпилированный (AOT) компилируется во время сборки, что позволяет своевременно обнаруживать ошибки шаблона и повышать производительность приложения.
Процесс режима компиляции #JiT
типичныйjiT
Процесс разработки приложения примерно такой:
- использовать
TypeScript
Разрабатывать Angular-приложения - использовать
tsc
для компиляции ts-кода этого приложения - Пакет
- компрессия
- развертывать
Когда приложение развернуто и пользователь открывает его в браузере, происходит следующее:
- Браузер скачать js код
-
Angular
запускать -
Angular
Начните в своем браузереJiT
Процесс компиляции, такой как создание кода js каждого компонента в приложении. - Страница приложения отображается
Вместо этого используйтеAoT
Процесс разработки аппликации шаблона таков:
- использовать
TypeScript
развиватьAngular
заявление - использовать
ngc
скомпилировать приложение- использовать
Angular
Компилятор компилирует шаблон и генерируетTypeScript
код -
TypesScript
Код компилируется вJavaScript
код
- использовать
- Пакет
- компрессия
- развертывать
Хотя предыдущий процесс немного сложнее, со стороны пользователя все становится проще:
- Скачать все коды
-
Angular
запускать - Страница приложения отображается
В итоге,Angular
серединаJit
а такжеAoT
Основные отличия:
- Когда происходит процесс компиляции
-
JiT
генерируетсяJS
код, покаAoT
генерируетсяTS
код. Это в основном потому, чтоJiT
делается в браузере, совершенно необязательно генерироватьTS
код, но непосредственно произведенныйJS
код.
Углубленная компиляция AOT
Скомпилированная конфигурация AOT
Установитьnpm
полагаться
npm install @angular/compiler-cli @angular/platform-server --save
Добавьте следующие удобные сценарии npm в package.json, чтобы компиляцию можно было выполнить с помощью одной команды.
"build:aot": "ngc -p tsconfig-aot.json
использовать@angular/compiler-cli
предоставляется в упаковкеngc
вместо этого компиляторTypeScript
Компилятор (ТСЦ).
настроитьtsconfig-aot.json
документ
просто поставь
tsconfig.json
Скопируйте файл и измените его
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es2015", "dom"],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"typeRoots": [
"./node_modules/@types/"
]
},
"files": [
"src/app/app.module.ts",
"src/main.ts"
],
"angularCompilerOptions": {
"genDir": "aot",
"skipMetadataEmit" : true
}
}
compilerOptions
Часть изменяет только одно свойство: ** установить модуль вes2015
(Подготовьтесь к последующей оптимизации встряхивания дерева)
ngc
Реальные дополнения к площади находятся внизуangularCompilerOptions
. этоgenDir
Атрибут указывает компилятору сохранить результаты компиляции в новомaot
Под содержанием
"skipMetadataEmit" : true
Это свойство не позволяет компилятору создавать файлы метаданных для скомпилированного приложения. Метаданные не требуются при экспорте в файлы TypeScript, поэтому их не нужно включать.
Начать компиляцию AOT:
node_modules/.bin/ngc -p tsconfig-aot.json
После завершения компиляции кучаNgFactory
файл, не редактируйте эти NgFactory! Эти файлы заменяются при перекомпиляции.
Измените способ руководстваmain.ts
документ
отplatformBrowserDynamic.bootstrap
изменить на использованиеplatformBrowser().bootstrapModuleFactory
и положиAppModuleNgFactory
Ему передается результат компиляции AOT.
import { platformBrowser } from '@angular/platform-browser';
import { AppModuleNgFactory } from '../aot/src/app/app.module.ngfactory';
console.log('Running AOT compiled');
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
Сотрясение дерева
Оптимизация встряхивания дерева относится к отслеживаниюimport
а такжеexport
оператор для статического анализа приложения, обхода графа зависимостей и удаления неиспользуемого кода. Путем удаления неиспользуемой части исходного кода и библиотечного кода оптимизация сотрясения дерева может значительно уменьшить размер загружаемого приложения.
Оптимизация встряхивания дерева может быть использована в нашем финальномBundle
Удалите код, который не используется в нашем приложении. Это один из наиболее эффективных способов уменьшения размера приложения.
В настоящее время webpack2 уже поддерживаетtree shaking
, официальный сайт описываетИспользование Rollup в angular
Введение в тряску деревьев на Чжиху
Разработчики используют JIT, производство использует AOT
В настоящее время компиляция AOT и оптимизация встряхивания дерева занимают слишком много времени для разработки. Это изменится в будущем. В настоящее время рекомендуется использовать компиляцию JIT в разработчике, а затем переключиться на компиляцию AOT перед выпуском в производство.