Detección de cambios
La detección de cambios es el proceso con el que un framework advierte que los datos de la aplicación cambiaron y actualiza el DOM para reflejarlo.
Todo framework de UI tiene que responder una pregunta: los datos cambiaron, entonces ¿qué hay que actualizar en la pantalla? El mecanismo que la responde se llama detección de cambios.
AngularJS usa el ciclo digest. Cada binding registra un watcher. Durante un digest, AngularJS ejecuta todos los watchers, compara cada valor con el anterior y repite hasta que nada cambia. El costo crece con la cantidad de watchers en la página.
Angular revisa un árbol de componentes de arriba hacia abajo. Con la estrategia por defecto, cada componente se revisa en cada pasada. Con ChangeDetectionStrategy.OnPush, un componente se omite salvo que algo lo haya marcado para revisión. Los signals hacen esto más preciso, porque Angular sabe qué componentes leen el valor que cambió.
Ejemplo
Una tabla con dos mil filas es lenta en AngularJS porque cada digest evalúa miles de watchers. La versión Angular usa un componente de fila OnPush con inputs basados en signals. Cuando una fila cambia, Angular revisa esa fila y sus ancestros y omite las demás filas.
Confusión frecuente
Muchos desarrolladores creen que un componente OnPush se actualiza solo cuando cambian sus inputs. El cambio de inputs es un disparador entre varios. El componente también se revisa cuando corre un manejador de eventos de su template, cuando el pipe async de su template recibe un valor, cuando cambia un signal leído en su template o cuando el código llama a markForCheck().
Un error relacionado es mutar un objeto que se pasó como input. La referencia es la misma, así que OnPush no ve ningún cambio. Crea un objeto nuevo o usa un signal.
En una aplicación híbrida corren ambos mecanismos, y ngUpgrade dispara un digest de AngularJS después de la pasada de Angular. Las pantallas con mucha actividad lo sienten, y esa es una razón más para terminar la migración. Los detalles están en la guía de migración.
Por qué importa. Muchos problemas de rendimiento de las aplicaciones AngularJS vienen del ciclo digest, y una aplicación híbrida corre los dos mecanismos a la vez. Entender ambos explica qué migrar primero y por qué.
Términos relacionados
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn