Configuración de Zoneless e Incremental Hydration
Aprende a configurar las últimas innovaciones de Angular: la eliminación de Zone.js (Zoneless) y la hidratación incremental para un rendimiento óptimo.
Configurar Zoneless en Angular
Con las versiones más recientes de Angular, configurar una aplicación sin Zone.js (Zoneless) es sumamente sencillo. Al crear un nuevo proyecto con Angular CLI (ng new), el asistente nos preguntará explícitamente si deseamos habilitar esta característica.
ng new mi-app-moderna
? Do you want to create a 'zoneless' application without zone.js (Developer Preview) (y/N) yTras responder afirmativamente y configurar las opciones de estilos y renderizado (SSR/SSG), Angular configurará automáticamente el archivo app.config.ts de la siguiente manera:
import { ApplicationConfig, provideZonelessChangeDetection } from '@angular/core';
import { provideClientHydration, withEventReplay } from '@angular/platform-browser';
export const appConfig: ApplicationConfig = {
providers: [
provideBrowserGlobalErrorListeners(), // Manejo global de errores en el navegador
provideZonelessChangeDetection(), // Habilita la detección de cambios sin Zone.js
provideRouter(routes),
provideClientHydration(withEventReplay())
]
};Transición desde el modo experimental
Anteriormente, para habilitar esta funcionalidad debíamos usar provideExperimentalZonelessChangeDetection(). El cambio al nombre actual refleja que la característica ha alcanzado estabilidad. Además, el proyecto se genera automáticamente sin el polyfill de zone.js en el archivo angular.json, reduciendo el tamaño final del bundle.
Mejores prácticas con OnPush
Aunque usemos Zoneless, se sigue recomendando el uso de la estrategia de detección de cambios OnPush para maximizar el rendimiento. Puedes configurar el CLI para que todos tus componentes incluyan esta propiedad por defecto:
"schematics": {
"@schematics/angular:component": {
"changeDetection": "OnPush"
}
}El nuevo provideBrowserGlobalErrorListeners()
Este nuevo proveedor introducido en las versiones más recientes permite capturar y gestionar errores globales del navegador que ocurren fuera del ciclo de vida estándar de Angular, proporcionando una capa extra de robustez para el monitoreo de la aplicación.
Configurar Incremental Hydration
La hidratación incremental permite que Angular aplique interactividad a las partes del HTML renderizado por el servidor de forma progresiva. Para activarla, añadimos withIncrementalHydration() a la configuración del cliente:
export const appConfig: ApplicationConfig = {
providers: [
provideZonelessChangeDetection(),
provideRouter(routes),
provideClientHydration(
withIncrementalHydration(),
withEventReplay()
)
]
};Con esta configuración activa, podemos utilizar triggers de hidratación en nuestros bloques @defer:
@defer (hydrate on viewport) {
<app-heavy-logic-component />
}Esto garantiza que el código JavaScript necesario para este componente solo se descargue y ejecute cuando el usuario lo tenga a la vista, optimizando tanto el tiempo de carga como el consumo de memoria del navegador.
Resumen de las novedades de Angular 20
Explora las innovaciones de Angular 20: estabilización de Signals, hidratación incremental, eliminación de Zone.js y cambios en la guía de estilos.
Hybrid Rendering y Modos de Renderizado
Optimiza la entrega de tu aplicación Angular configurando diferentes modos de renderizado (CSR, SSR, SSG) para cada ruta según tus necesidades de SEO y rendimiento.