William Marques
Comment faire scaler son architecture ?
Comment la garder lisible ?
Comment s'assurer des performances de mon application ?
"Look around: our portable computers are thousands of times more powerful than the ones that brought man to the moon.
Yet every other webpage struggles to maintain a smooth 60fps scroll on the latest top-of-the-line MacBook Pro. I can comfortably play games, watch 4K videos but not scroll web pages? How is it ok?"
Folder By Feature
Ahead Of Time Compilation
Lazy Loading
Détection de changement OnPush
Webpack Bundle Analyzer
Dans les habitudes, notamment dans le monde Java, mais pas conseillé pour Angular
Exemple:
Un dossier components
Un dossier services
...
Code des features non centralisé
Trop de fichiers !
MaFeature
Composant
Service
Module
Modèle
Si code partagé entre les features, placer le code dans le SharedModule
Core:
Services partagés dans l'application
Importé uniquement dans le AppModule
Heroes: Feature
Shared: Composants/directives/pipes partagés
Importé dans tous les features modules
Just In Time (JIT): La compilation de l’application se fait au runtime, dans le navigateur
Ahead Of Time (AOT): La compilation de l’application se fait au build
Rendering plus rapide: Pas d’étape de compilation
Détection d’erreurs en amont: AOT vérifie les bindings dans les templates et permet d’éviter les erreurs au runtime
Avant
Après
Avec le CLI: ng build --aot
L'AOT est activée par défaut lors du ng build --prod
Sans le CLI: Utiliser @ngtools/webpack
Ne fournir à l’utilisateur que ce dont il a besoin.
Exemple:
Mon application a un super dashboard d’admin avec des graphiques
95% de mes utilisateurs ne sont pas admin, donc inutile de leur faire télécharger la librairie de graphiques !
Supprimer l’import module dans le AppModule
Modifier le routing du AppModule pour utiliser LoadChildren
Placer les routes du module dans son routing module
Stratégies de chargements:
Utilisation:
Indique à Angular que le composant ne dépend que des références de ses Inputs.
L’objet passé en Input doit donc être immutable !
Moins de détection de changement
De meilleures performances !
Analyser ce que contient ses bundles JavaScript
Identifier rapidement les librairies volumineuses
Trouver des alternatives
Générateur d'application Angular/React + Spring Boot
Toutes les bonnes pratiques déjà incluses !
Folder by feature
Lazy Loading
Optimisations Webpack
Librairies populaires présentes
Bootstrap
Moment
Font Awesome
En plus:
Génération d'entités (Back + Front)
Architecture micro-services
Déploiement cloud (GCP, Azure, AWS...)
Gestion de l'authentification
Et plein d'autres choses !