¿Cómo mejorar el rendimiento de una aplicación usando Service Workers?
Optimizar nuestras aplicaciones web es esencial para ofrecer una experiencia de usuario fluida y rápida. Una manera efectiva de lograr esto es convirtiendo nuestra aplicación en una aplicación web progresiva (PWA) mediante el uso de Service Workers. Estas técnicas involucran pre-carga y almacenamiento en caché de archivos, mejorando significativamente los tiempos de carga y funcionamiento.
¿Qué es un Service Worker?
Un Service Worker es un script que el navegador descarga y ejecuta en segundo plano, incluso sin conexión a internet. Su principal objetivo es manejar caché y hacer que las aplicaciones funcionen más rápido y sin interrupciones.
¿Cómo implementar un Service Worker en Angular?
La implementación de un Service Worker en Angular es sencilla y sigue pasos sistemáticos:
Instalación: Usa el comando de Angular CLI para añadir soporte de Service Worker a tu proyecto. Asegúrate de especificar el nombre adecuado del proyecto.
ng add @angular/pwa --project nombreDelProyecto
Configuración: Angular generará y actualizará varios archivos, incluyendo la configuración del Service Worker y un archivo manifest que define características de la aplicación como íconos y nombre.
Archivos caché: Define los archivos que deben precargarse y almacenarse en caché, asegurándote de que no se vuelva a solicitar al servidor estático.
¿Qué problemas pueden surgir durante la implementación?
Al intentar compilar una aplicación de producción con Service Workers, puede surgir un error debido a la duplicidad de archivos o referencias incorrectas en el app.module. Es crucial revisar los módulos del proyecto y garantizar que las referencias sean correctas.
¿Cómo probar y depurar Service Workers en producción?
Una vez que la aplicación esté configurada para producción, es importante probarla en un ambiente similar al real. Utiliza un pequeño servidor HTTP para desplegarla y verifica que el Service Worker funcione correctamente.
Usa herramientas de desarrollo en el navegador para revisar los recursos en caché y el manifiesto.
Limpia manualmente el caché si ves que no se reflejan los cambios.
Beneficios y consideraciones de rendimiento
Implementar un Service Worker mejora la experiencia del usuario al:
Reducir tiempos de carga: Los archivos almacenados localmente cargan mucho más rápido después de la primera visita.
Optimizar peticiones: Almacenando en caché ciertas solicitudes, se evitan los tiempos de espera derivados de solicitudes al servidor.
Sin embargo, la primera carga puede ser más lenta debido a la precarga de recursos. En proyectos de gran escala, considera estrategias avanzadas, como carga diferida o segmentación de bundles.
Recursos adicionales
Para un entendimiento más profundo, te recomendamos revisar el curso Aplicaciones Web Progresivas en Platzi donde se exploran más a fondo las capacidades y personalizaciones de Service Workers para distintos tipos de aplicaciones.
Consejo: Al probar a los service workers, es una buena idea usar una ventana de incógnito o privada en su navegador para asegurarse de que el trabajador de servicios no termine leyendo de un estado anterior, lo que puede causar un comportamiento inesperado.
Gracias
Para aquellos que quieran usar el servidor http: link
npm install http-server -g
Saludos..
npm install http-server -g
No se olviden de limpiar la cache :P yo tenia data de un proyecto viejo y no me cargaba la web.
Lo corri con Angular 9 y no me agrego la libreria de @angular/pwa. No es ningún problema, todo ok.
Igual pasa con Angular 10
Por si alguien aun lo esta viendo.
Hay que agregarlo segun la version de angular del proyecto.
ng add @angular/pwa@0.1002.4--project platzi-store
Alguien sabe como se le agrega el tiempo acá, el profe dice que se puede pero no dice como?
En esta clase se utilizo un Service Worker de tipo assetGroups que permite la pregarga de archivos de tipo asset; como lo son css, js, imagenes etc. Este tipo de Worker no tiene la opción de definir un tiempo maximo de vida en el cache.
Hay otro Service Worker de tipo dataGroups el cual se utiliza cuando haces peticiones de información (HTTP GET, HEAD) y en este si hay una propiedad llamda maxAge el cual defines el tiempo que almacenara el cache.
Puedes verlo en la documentación de angular link
Cual seria la forma de usar PWAs pero con un CDN como AWS-Cloudfront donde, yo actualizo periodicamente la aplicacion y quiero que el usuario NO se quede con una version antigua de la app en su navegador?
Cuando subo a qa o producción uso swUpdate.available para saber si hay una version nueva de la app disponible y asi recargarla
ng add @angular/pwa --project platzi-store
Como se puede mostrar la app siempre actualizada al usuario, teniendo en cuenta el fuerte cache de las aplicaciones angular.
¿Qué tan utilizados son los services workers?, en qué caso hay que utilizarlos y en cuales no?
Los Services Workers nos permiten varias funcionalidades, es usando comúnmente en apps SPA para hacer cache de datos, dar soporte offline, notificaciones, actualizaciones, etc .
La sección de Application >> Service Workers me aparece en blanco, a alguien le pasa igual?
Dato interesante en la documentacion de Angular que menciona que, literalmente puedes desconectar tu servidor (http-server en este caso) y la aplicacion seguira funcionando sin ningun problema. Tambien se puede simular esto en el modo offline de las DevTools.