Passer une app Angular en zoneless + signals
provideZonelessChangeDetection() et laisser les signals piloter la réactivité.
Pourquoi virer zone.js
setTimeout , les promesses, les events DOM, et déclenche un cycle de détection global à chaque fois. Sur une grosse app, on vérifie des milliers de bindings alors que trois ont changé. Le mode zoneless inverse la logique : rien ne se redessine tant qu'un signal lu dans le template n'a pas notifié son changement.
- ›
bundle plus léger : on supprime une dépendance de ~100 ko - ›
traces de pile lisibles : plus de frames zone.runpartout - ›
détection ciblée : seuls les composants qui dépendent du signal modifié sont marqués
Activer le mode zoneless
provideZoneChangeDetection et on branche le provider zoneless :
Penser en réactivité fine
signal() , les valeurs dérivées par computed() , et les effets de bord par effect() :
Les pièges à connaître
setTimeout(() => this.value = x) sans passer par un signal ne rafraîchira plus la vue. Idem pour les souscriptions RxJS : il faut soit toSignal() , soit appeler signal.set() dans le subscribe . Côté tests, on bascule Vitest en zoneless et on remplace les fakeAsync / tick par await fixture.whenStable() . La doc officielle détaille chaque cas dans le guide zoneless .
Le zoneless ne rend pas une app magiquement plus rapide. Il rend la réactivité explicite : tu sais exactement pourquoi quelque chose se redessine, et c'est ça qui change tout en debug.