@defer et le nouveau control flow : moins de JS au démarrage
*ngIf et *ngFor par une syntaxe plus jolie. Couplé à @defer , il change ce qui finit dans le bundle initial : on n'expédie au démarrage que le JavaScript réellement nécessaire au premier rendu, le reste arrive à la demande.
@if, @for, @switch
@ est intégrée au compilateur : pas d'import de directive, et un track obligatoire sur @for qui force à réfléchir à l'identité des éléments. C'est ce track qui évite de tout re-créer dans le DOM à chaque changement de liste.
@empty de @for et le @case exhaustif de @switch couvrent des cas qu'on oubliait souvent avec les directives structurelles.
@defer : charger plus tard
@defer enveloppe un bout de template dont le code est sorti du bundle principal et chargé en chunk séparé au moment voulu. Le déclencheur décide quand : on viewport charge quand le bloc entre dans l'écran, on interaction au premier clic/focus, on idle quand le navigateur est inactif, on hover , ou on timer .
Les blocs annexes
- ›
@placeholder: rendu avant tout déclenchement, c'est lui qui peut porter le trigger
on viewport / on interaction . Le minimum évite un flash trop bref.
- ›
@loading: pendant la récupération du chunk ;afterretarde son affichage pour ne pas
- ›
@error: si le chunk ne charge pas (réseau coupé, par exemple).
prefetch on hover , pour que le clic soit instantané sans alourdir le démarrage.
L'impact sur le bundle
@defer est extrait dans son propre chunk. Une page lourde — éditeur de code, graphiques, carte — peut ainsi sortir 100 à 200 ko du bundle initial, qui ne se téléchargent que si l'utilisateur scrolle jusque-là. Le gain se mesure directement sur le Largest Contentful Paint et le temps d'interactivité. La doc détaille chaque déclencheur dans le guide du chargement différé .
@defer (on viewport) placé au-dessus de la ligne de flottaison se déclenche immédiatement et n'apporte rien. Le différé n'a de sens que pour ce qui est hors écran ou conditionnel.
Le control flow rend l'intention lisible, @deferrend le coût explicite. Plutôt que de tout charger « au cas où », tu déclares quand chaque morceau mérite son JavaScript — et le démarrage s'allège tout seul.