Angular Fundamentals - Zoneless
Entenda como o Angular moderno pode funcionar sem Zone.js e por que isso muda a forma como a detecção de mudanças acontece.
Introdução
Durante muitos anos o Angular utilizou uma biblioteca chamada Zone.js para descobrir quando precisava atualizar a interface.
Sempre que ocorria um evento assíncrono, o Angular era notificado e executava o processo de Change Detection.
Com a chegada dos Signals, o framework passou a caminhar para um novo modelo chamado Zoneless.
O que é Zone.js?
Exemplos de operações monitoradas:
setTimeout(() => {});
setInterval(() => {});
fetch("/api/users");
button.addEventListener("click", () => {});
Promise.resolve();Sempre que algo acontecia, o Angular executava o Change Detection.
O problema do Zone.js
O modelo funciona bem, mas possui um custo.
Imagine uma aplicação com centenas de componentes.
App
├── Header
├── Sidebar
├── Dashboard
├── Charts
├── Table
└── FooterQuando ocorre um clique simples:
Usuário clicou em um botão
↓
Zone.js detecta
↓
Angular executa Change Detection
↓
Árvore inteira é verificadaMesmo quando apenas um pequeno trecho da tela mudou.
O que é Zoneless?
Isso é possível graças ao uso de Signals e mecanismos modernos de reatividade.
Como os Signals ajudam?
Antes:
Evento
↓
Zone.js
↓
Change Detection
↓
Árvore inteiraAgora:
Signal alterado
↓
Angular sabe quem depende dele
↓
Atualiza apenas os consumidoresExemplo:
const count = signal(0);
count.set(1);O Angular sabe exatamente quais componentes utilizam esse Signal.
Benefícios do Zoneless
Menor bundle
Removendo o Zone.js, a aplicação carrega menos código.
Menos trabalho desnecessário
Ao invés de verificar toda a árvore de componentes:
App
├── Header
├── Sidebar
├── Dashboard
└── Footero Angular atualiza apenas quem realmente depende do estado alterado.
Melhor integração com Signals
Signals fornecem rastreamento granular de dependências.
Isso combina perfeitamente com o modelo Zoneless.
Como habilitar?
Nas versões mais recentes:
import { provideZonelessChangeDetection } from "@angular/core";
bootstrapApplication(AppComponent, {
providers: [provideZonelessChangeDetection()],
});O Angular passa a operar sem Zone.js.
O que muda para o desenvolvedor?
Grande parte do código continua igual.
Porém algumas práticas tornam-se mais importantes:
- Utilizar Signals
- Evitar mutações silenciosas
- Preferir estado reativo
- Entender melhor o fluxo de atualização da UI
Zoneless e OnPush
Uma dúvida comum.
Comparação
| Aspecto | Zone.js | Zoneless |
|---|---|---|
| Dependência externa | Sim | Não |
| Bundle | Maior | Menor |
| Atualizações | Mais amplas | Mais granulares |
| Integração com Signals | Parcial | Excelente |
| Performance | Boa | Melhor em cenários modernos |
Fluxo visual
Angular tradicional
Evento
↓
Zone.js
↓
Change Detection
↓
Verificação da árvoreAngular Zoneless
Signal
↓
Dependências rastreadas
↓
Atualização específicaCasos de Uso
Perguntas de Entrevista
O que é Zone.js?
O que significa Angular Zoneless?
Por que Zoneless pode melhorar performance?
Qual a relação entre Signals e Zoneless?
Pergunta clássica de entrevista
Zone.js vai desaparecer do Angular?