veronica oviedo
Jose Rafael Oliva Montes
¿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:
ng add @angular/pwa --project nombreDelProyecto
manifest que define características de la aplicación como íconos y nombre.¿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.
@NgModule({ declarations: [ // Componentes aquí ], imports: [ // Otros módulos aquí ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production, registrationStrategy: 'registerWhenStable:30000' }) ], // ... }) export class AppModule { }
¿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.
Beneficios y consideraciones de rendimiento
Implementar un Service Worker mejora la experiencia del usuario al:
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.
veronica oviedo
Jose Rafael Oliva Montes
Alejandro Valenzuela
Luis Abdel Rangel Castro
silvana murgo
Javier Batres
Luis Abdel Rangel Castro
Roberto Xocop Cuxil
Jorge Jorge Marrero
Armando Alexis
Enrique Ortuno
Enrique Tecayehuatl
Camila Alejandra Cardona Otálora
silvana murgo
Wilfredo Alfonso Torres Ortíz
Gustavo Restrepo
Nicolas Molina
ProfesorIsai David Vélez De León
Cesar Velásquez Córdova
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?
"assetGroups": [ { "name": "app", "installMode": "prefetch", "resources": { "files": [ "/favicon.ico", "/index.html", "/*.css", "/*.js" ] } }, {```
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?
Puedes crear una invalidación: aws cloudfront create-invalidation --distribution-id <ID> --paths "/*"
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 .
Puedes ver más acerca de como usarlos en el curso de Angular PWA https://platzi.com/clases/pwa-angular/
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.