
Con le versioni più recenti, Angular offre la possibilità di eliminare Zone.js e passare a una change detection zoneless. È il default che ho scelto per questo stesso sito, e in generale per i progetti Angular più recenti che sviluppo: vale la pena capire cosa cambia davvero, non solo a livello di performance ma di abitudini di sviluppo.
Zone.js intercetta eventi asincroni (click, timer, richieste HTTP) e innesca automaticamente un ciclo di change detection su tutta l'applicazione. Comodo, ma anche costoso: ogni evento, anche irrilevante per la UI, può far ripartire un controllo su interi alberi di componenti, ed è una delle cause più comuni di applicazioni Angular percepite come lente.
Senza Zone.js, Angular non sa più automaticamente quando un componente deve essere ri-renderizzato: serve un modello esplicito, basato su Signal e sull'input binding reattivo, per notificare i cambiamenti di stato. Le operazioni asincrone che aggiornano lo stato manualmente (es. subscription RxJS non basate su signal) devono essere gestite con attenzione, spesso con un semplice ChangeDetectorRef.markForCheck() o convertendo lo stato in signal.
Zoneless conviene soprattutto in applicazioni nuove, dove si può progettare lo stato fin dall'inizio attorno ai Signal, e nei progetti dove le performance percepite sono un requisito, non un nice-to-have. In un progetto legacy con molto codice basato su RxJS puro, la migrazione va valutata con più cautela e può convenire farla in modo incrementale.
Zoneless non è solo un flag da attivare: è un cambio di mentalità nella gestione dello stato. Nei progetti che sviluppo da zero lo adotto ormai di default, perché il codice risultante è più esplicito su quando e perché la UI si aggiorna, un vantaggio che va oltre la semplice performance.
Raccontami la tua idea: valutiamo insieme la soluzione più adatta.
Contattami