. Compilation au lancement de l'application VS en amont
. Taille du livrable différente
. Performances au lancement de l'application
. Avec Angular 5 :
. ng build --prod = ?
ng build --env=prod ... --aot --build-optimizer
Bientôt possible de développer en AOT?
. ng serve --aot with ng 4.4 and CLI 1.4 : ~4000-8000ms
. ng serve --aot with ng 5.0 and CLI 1.7 : ~1500-3400ms
. ng eject :
. Extraction de la config webpack de la CLI Angular.
. Possibilité d'ajouts de plugins, etc...
. Angular CLI :
. Aspect "boîte noire"
. Complexe à customiser...
. Attention aux imports non maîtrisés...
Build Output size build duration
_ 4,836M 5389ms
rxjs/add/op/map 5,523M 5950ms
rxjs/Rx 6,878M 7345ms
. Best practice: un fichier d'import unique rxjs-imports.ts
. Et ajouter le set de rules rxjs-tslint-rules
. npm i -g source-map-explorer
. ng build --prod -sm
. source-map-explorer ./dist/main*.js
. Lazy Loading :
. A utiliser à bon escient.
. Chargement des modules peut être conditionné par un guard (canLoad).
. Différentes preloading Strategies :
- Au chargement des routes correspondantes.
- PreloadAllModules
- CustomPreloadingStrategy
. Angular change detection :
. computed values in templates :
. Réévaluées à chaque change detection cycle (potentiellement de nombreuses fois en Default).
. Pas de gros traitements/calculs.
. Solutions :
. Ajout d'une propriété calculée une fois.
. Utilisation de pures pipes
. onPush :
. changeDetectionStrategy.Default... Un peu trop "magic"?
. Permet de contrôler précisément quand et comment sont déclenchés les cycles de rafraichissement de vos composants :
- A chaque réaffectation d'un @Input()
- A chaque appel explicite de changeDetector.markForCheck()
. Interrompre la change Detection :
. Dans les cas où elle se déclenche trop souvent (flux continu d'events, etc...), il est possible de "détacher" le change detector du composant.
. trackBy :
. Optimisation des boucles *ngFor
. Pourquoi re-render un élément qui n'a pas changé?
. Préciser l'identifiant de chaque élément (id? index?).