Angular, uno de los frameworks más populares para desarrollar aplicaciones web, se destaca por su capacidad para manejar el flujo de datos de forma eficiente. Dentro de su arsenal, los Observables juegan un papel crucial. Cuando tenemos un flujo constante de datos, como la conexión a un servidor o eventos provenientes de una base de datos en tiempo real, Angular ofrece herramientas poderosas para gestionar estas situaciones. Los Observables permiten suscripciones, donde cada vez que hay un cambio en el flujo de datos, se notifica al suscriptor.
¿Cómo funcionan los Observables HTTP en Angular?
Los Observables dentro de Angular son particularmente útiles cuando se trabajan con el módulo HttpClient. Este módulo facilita la suscripción automática y la cancelación una vez que se completa la petición. Esto significa que después de obtener los datos, la suscripción se desactiva automáticamente, evitando así potenciales problemas de memoria.
En el ejemplo anterior, HttpClient se encarga de gestionar la suscripción.
¿Qué problemas pueden ocasionar las suscripciones indefinidas?
Si los Observables no se manejan adecuadamente, pueden causar problemas de rendimiento en la aplicación, como bloqueos de memoria. Cuando un componente sigue suscrito a un Observable incluso después de haber dejado de ser utilizable en la interfaz, estos recursos se siguen consumiendo innecesariamente.
Ejemplo práctico con Observables
Para ilustrar este problema, podemos crear un Observable que emite valores a intervalos regulares.
En un entorno de desarrollo, esta suscripción comenzará a imprimir valores, incluso si el componente donde fue iniciado ya no está activo en pantalla. Esto se convierte en un problema si existen múltiples componentes suscritos innecesariamente.
¿Cómo se pueden desuscribir adecuadamente los Observables?
Para evitar problemas de memoria, se debe implementar la lógica para desuscribir aquellos Observables que ya no son necesarios. Angular provee un ciclo de vida de componentes que se integra perfectamente para este fin.
Uso de ngOnDestroy
Implementar el método ngOnDestroy permite cancelar las suscripciones activas una vez que el componente se elimina de la vista.
Esta estrategia asegura que cualquier suscripción activa se cancele al salir el componente del DOM, optimizando así el uso de recursos y minimizando la posibilidad de fugas de memoria.
Invitar a los estudiantes a explorar en profundidad los conceptos de Angular es esencial para maximizar la eficiencia y eficacia de sus aplicaciones. Recuerda siempre implementar estas buenas prácticas en tus propios proyectos y continuar aprendiendo sobre estas valiosas herramientas que ofrece Angular.
Una mejor práctica para desuscribirte de tus suscripciones, es usar el operator de rxjs takeUntil, que mantiene activa las suscripciones de la aplicación hasta que otro observable emita.
Eso sirve cuando tienes muchas suscripciones en tu componente, para evitar tener un unsuscribe por cada suscripción, además de prevenir que se te olvide agregar el unsuscribe de alguna.
Una mejor practica para manejar las suscripciones en angular es hacer uso del metodo add() que contiene la Subscription. Este método nos permitirá guardar todas las subscripciones que sean necearías. Luego llamamos unsubscribe() y este método automáticamente cerrara todas las subscripciones.
La ventaja de realizarlo de esta forma es que podemos agrupar todas las subscripciones y no tener que crear un variable por cada subscripcion.
¿O sea todo lo que sea subscribe es como un addEventListener? Y cuando un componente de angular se destruya o no se use más, se tiene que remover ese listener?(estoy ejemplificando) es decir ¿el unsubscribe sería un removeEventListener del componente cuando se destruye un componente en angular? Quisiera entender la importancia del unsubscribe for dummies
Hola Kike! Sí, es podría interpretar de la manera que lo mencionas, en angular un subscribe contempla más cosa que un addEventListener, pero si es valido lo que dices
Una pregunta si yo creo una variable de tipo observable para almacenar una petición http (que en teoría se auto de-suscribe) si yo posteriormente me suscribo a este observable tengo que de-suscribirme o como viene de un una petición en http client también se auto de-suscribe?
Estas en lo correcto si guardas esto como como un observable que viene de httpClient ella completa la suscripción, así que en esa variable no tienes por preocuparte por esto.
Muy buen video ya que cuando se comienza a usar los observables generalmente se desconoce este concepto y te das cuenta cuando tienes que debuguear xD.