Pepe
Siento que no es un problema comun, nunca me ha pasado eso de afectar un modulo b al actualizar el modulo a
¿Cómo optimizar la detección de cambios en Angular?
En el desarrollo de aplicaciones web con Angular, la optimización de la detección de cambios es fundamental para asegurar un rendimiento eficiente. La detección de cambios en Angular tiene lugar cada vez que un evento se produce y puede llevar a recalcular o volver a renderizar componentes. Esto puede convertirse en una complejidad, especialmente cuando no está bien manejado. Exploremos cómo podemos optimizar este proceso para mejorar la eficiencia de nuestras aplicaciones Angular.
¿Qué es la detección de cambios en Angular?
La detección de cambios es un mecanismo por el cual Angular detecta modificaciones en el estado de los componentes. Cada vez que ocurre un evento o acción del usuario, Angular verifica si los datos de los componentes han cambiado y actualiza el DOM (Document Object Model) según sea necesario. Este proceso ocurre por defecto para cada modificación del modelo de datos, lo que puede llevar a un alto consumo de recursos si no está optimizado.
¿Cómo implementamos una estrategia eficiente?
Una estrategia efectiva de manejo de cambios en Angular es usar ChangeDetectionStrategy.OnPush. Este método cambia el enfoque de detección de cambios de manera predeterminada hacia un método más optimizado, ejecutándose solo cuando se envían nuevos inputs hacia los componentes.
import { ChangeDetectionStrategy, Component } from '@angular/core'; @Component({ selector: 'app-my-component', templateUrl: './my-component.component.html', styleUrls: ['./my-component.component.css'], changeDetection: ChangeDetectionStrategy.OnPush }) export class MyComponent { // Component logic here }
Al aplicar la estrategia OnPush, Angular solo llevará a cabo la detección de cambios cuando:
markForCheck.¿Por qué usar OnPush puede mejorar el rendimiento?
El uso de ChangeDetectionStrategy.OnPush reduce la frecuencia de ejecución de la detección de cambios. Esto es especialmente útil en componentes que reciben inputs y no dependen de otros factores internos para actualizarse, permitiendo que Angular optimice el ciclo de verificación de cambios. Al aplicar esto, se consigue:
Casos de uso recomendados
Debemos considerar usar OnPush en situaciones donde la arquitectura de la aplicación se preste para el uso eficiente del estado mediante props o servicios observables que gestionan el estado de la aplicación. Por ejemplo:
Implementar estrategias de detección de cambios más enfocadas como OnPush asegura que solo se procesen actualizaciones necesarias y esenciales, ofreciendo un estado óptimo de rendimiento para aplicaciones Angular.
Este enfoque optimizado nos invita a pensar y diseñar conscientemente nuestras arquitecturas de aplicación, y así maximizar la eficiencia beneficiosa para los usuarios y el sistema en general. ¡Continúa explorando estas técnicas para convertirte en un experto en Angular!
Primer aproximamiento a Change Detection.
@Component({ ... changeDetection:ChangeDetectionStrategy.OnPush // changeDetection:ChangeDetectionStrategy.Default })
esto sirve pero escucha a todos los eventos del componente, no es lo que buscamos en este caso.
layout.component.scss
:host { margin-bottom: 50px; display: flex; margin-left: auto; margin-right: auto; width: 100%; } @media screen and (max-width: 600px) { :hots { display: block; } }
Pepe
Siento que no es un problema comun, nunca me ha pasado eso de afectar un modulo b al actualizar el modulo a
Ricardo Exequiel De Angelis
ERROR in src/app/website/contact/components/list/list.component.ts:17:20 - error NG1010: changeDetection must be a member of ChangeDetectionStrategy enum from @angular/core 17 changeDetection: ChangeDetectionStrategy.OnPush ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/app/website/contact/contact.module.ts:12:9 - error NG6001: The class 'ListComponent' is listed in the declarations of the NgModule 'ContactModule', but is not a directive, a component, or a pipe. Either remove it from the NgModule's declarations, or add an appropriate Angular decorator. 12 ListComponent ~~~~~~~~~~~~~``` Para los que tengan este error solo corrijan el import de changeDetectionStrategy debe ser de angularCore
Gustavo Restrepo
Existen casos donde se tenga que dejar la estrategia de cambios en default?
Nicolas Molina
ProfesorSi, normalmente si no tienes una estrategia de datos basada en observables o el patrón de Containers/Components necesitas activar la estrategia por defecto.