Deferrable Views et optimisation du chargement

Le problème

Les composants lourds (éditeurs, graphiques, cartes) impactent le bundle initial et le LCP même lorsqu’ils sont hors de la vue.

Solution : @defer

src/app/dashboard.component.html
@defer (on viewport) {
<app-heavy-chart />
} @placeholder {
<div class="chart-skeleton">Chargement...</div>
} @loading (minimum 300ms) {
<app-spinner />
} @error {
<p>Impossible de charger le graphique.</p>
}

Déclencheurs disponibles

DéclencheurComportement
on viewportCharge quand l’élément entre dans le viewport
on idleCharge pendant un moment d’inactivité du navigateur
on interactionCharge au premier clic ou focus
on immediateCharge immédiatement après le rendu principal
when conditionCharge quand une expression devient true

Exemple avec condition

src/app/profile.component.ts
showDetails = signal(false);
src/app/profile.component.html
<button (click)="showDetails.set(true)">Voir les détails</button>
@defer (when showDetails()) {
<app-user-details />
}