Beruflich Dokumente
Kultur Dokumente
Cochabamba – Bolivia
2018
1
Agradecimientos
A mis madre y hermana; por siempre darme su
fuerza y apoyo incondicional que me ha
ayudado y llevado hasta donde estoy ahora.
A mi tutor de proyecto, por la colaboración que
me brindo a lo largo del mismo.
A Digital Harbor por abrir las puertas para
realizar este diplomado de doble titulación.
A mis amigos que me ayudaron y apoyaron en
los módulos de nuestro diplomado.
¡Muchas Gracias!
2
Índice de contenidos
1. Generalidades ........................................................................................................................... 11
1.1. Antecedentes Generales ........................................................................................................ 11
1.2. Antecedentes Específicos ....................................................................................................... 11
2. Metodología ............................................................................................................................. 11
3. Aplicaciones web progresivas ..................................................................................................... 12
3.1. Definición.............................................................................................................................. 12
3.1.1. Características de una aplicación web progresiva .............................................................. 12
3.1.2. Fiables ........................................................................................................................... 12
3.1.3. Veloces .......................................................................................................................... 13
3.1.4. Atractivas....................................................................................................................... 13
3.2. Tecnologías que aprovecha las aplicaciones web progresivas .................................................... 13
3.2.1. Diseño Responsivo.......................................................................................................... 13
3.2.1.1. Enfoque en diseño responsivo ..................................................................................... 14
3.2.2. Service Worker............................................................................................................... 14
3.2.2.1. Ciclo de vida de un Service Worker .............................................................................. 15
3.2.2.2. Requisitos .................................................................................................................. 16
3.2.2.3. Registro de un Service Worker..................................................................................... 17
3.2.2.4. Instalar un Service Worker .......................................................................................... 17
3.2.2.5. Cacheo y retorno de peticiones ................................................................................... 19
3.2.2.6. Actualización del Service Worker ................................................................................. 20
3.2.3. El modelo de App Shell ................................................................................................... 20
3.2.3.1. Beneficios .................................................................................................................. 22
3.2.3.2. Requisitos .................................................................................................................. 22
3.2.3.3. Compilar una App Shell ............................................................................................... 22
3.2.4. Manifiesto de la aplicación .............................................................................................. 23
4. Aplicación web progresiva con Angular ....................................................................................... 26
4.1. Definición.............................................................................................................................. 26
4.2. Fundamentos ........................................................................................................................ 26
4.2.1. Arquitectura .................................................................................................................. 26
4.2.2. Módulos ........................................................................................................................ 27
4.2.3. Componentes y plantillas ................................................................................................ 28
4.2.4. Formularios.................................................................................................................... 28
3
4.2.5. Enrutamiento y Navegación ............................................................................................ 29
4.2.6. Agregar App Shell ........................................................................................................... 29
4.2.6.1. Cargador.................................................................................................................... 30
4.2.6.2. Cabecera.................................................................................................................... 30
4.2.7. Agregar el manifiesto a una aplicación Angular. ................................................................ 30
4.2.8. Agregar Service Worker .................................................................................................. 32
5. Uso de herramientas para la auditoria de una aplicación web progresiva....................................... 36
5.1. Lista de verificación para una aplicación web progresiva........................................................... 36
5.1.1. Lista base de verificación ................................................................................................ 36
5.1.1.1. El sitio es servido a través de HTTPS ............................................................................. 36
5.1.1.2. Las páginas responden en dispositivos móviles ............................................................. 36
5.1.1.3. Todas las URL de las aplicaciones se cargan sin conexión ............................................... 36
5.1.1.4. Metadatos proporcionados para agregar home screen.................................................. 37
5.1.1.5. Primera carga rápida incluso en 3G .............................................................................. 37
5.1.1.6. El sitio funciona navegador cruzado ............................................................................. 37
5.1.1.7. Las transiciones de página deben ser rápidas ................................................................ 37
5.1.1.8. Cada página tiene una URL .......................................................................................... 38
5.2. Auditar aplicaciones web con Lighthouse ................................................................................ 38
5.2.1. Corre Lighthouse como una extensión Chrome................................................................. 39
5.2.2. Lighthouse desde línea de comandos ............................................................................... 39
5.2.3. Registro Service Worker.................................................................................................. 40
5.2.3.1. Requerimientos para esta auditoria ............................................................................. 40
5.2.3.2. Implementación de la auditoria ................................................................................... 40
5.2.4. Manifiesto de la aplicación .............................................................................................. 40
5.2.4.1. Como aprobar la auditoria........................................................................................... 40
6. Aplicación de caso de estudio..................................................................................................... 42
6.1. Migración de una aplicación Angular....................................................................................... 42
6.2. Auditar aplicación con Lighthouse........................................................................................... 42
6.3. Agregar App Shell .................................................................................................................. 44
6.3.1. Cargador........................................................................................................................ 44
6.3.2. Cabecera ....................................................................................................................... 44
6.3.3. JS Fallback...................................................................................................................... 44
6.4. Agregar el Manifiesto en la aplicación ..................................................................................... 45
4
6.5. Agregar Service Worker.......................................................................................................... 47
6.6. Uso de la aplicación como aplicación nativa............................................................................. 49
7. Conclusiones............................................................................................................................. 52
5
Índice de figuras
Figura 1 Ciclo de vida de un Service Worker........................................................................................ 16
Figura 2 Registro de un Service Worker. ............................................................................................. 17
Figura 3 Registro de recursos en caché con un Service Worker............................................................. 18
Figura 4 Agregar un Listener para cacheo y retorno de peticiones. ....................................................... 19
Figura 5 Definición de las diferentes secciones de una aplicación. ........................................................ 21
Figura 6 Ejemplo de una aplicación con Shell definida.......................................................................... 23
Figura 7 Ejemplo de archivo manifest.json. ......................................................................................... 24
Figura 8 Arquitectura de una aplicación Angular.................................................................................. 27
Figura 9 Ejemplo de un manifiesto en una aplicación Angular............................................................... 31
Figura 10 Agregar un manifiesto en una aplicación Angular.................................................................. 32
Figura 11 Agregar referencias de un manifiesto en el index.html en una aplicación Angular. .................. 32
Figura 12 Comando para agregar librerías para service worker en una aplicación Angular. ..................... 33
Figura 13 Definición de un archivo ngsw-config.json para una aplicación Angular. ................................. 33
Figura 14 Habilitar Service Worker en una aplicación Angular. ............................................................. 34
Figura 15 Agregar el módulo Service Worker en una aplicación Angular. ............................................... 34
Figura 16 Comando para hacer build de una aplicación Angular con Service Worker. ............................. 35
Figura 17 Comando para crear una aplicación Angular como aplicación web progresiva......................... 35
Figura 18 Ejemplo de una auditoría realizada con Lighthouse en una aplicación web. ............................ 39
Figura 19 Estructura mínima de un archivo manifest.json. ................................................................... 41
Figura 20 Opciones para auditar una aplicación web progresiva con Lighthouse. ................................... 42
Figura 21 Resultado de la auditoria en la aplicación del caso de estudio................................................ 43
Figura 22 Detalles de la auditoria en la aplicación del caso de estudio................................................... 43
Figura 23 Código de la cabecera de la aplicación del caso de estudio. ................................................... 44
Figura 24 Index.html para cuando los scripts no están disponibles........................................................ 45
Figura 25 Manifiesto de la aplicación del caso de estudio..................................................................... 46
Figura 26 Habilitación del manifiesto en la aplicación. ......................................................................... 46
Figura 27 Agregando el manifiesto en el archivo index.html. ................................................................ 47
Figura 28 Archivo de configuración para el Service Worker de la aplicación........................................... 48
Figura 29 Habilitación del Service Worker en la aplicación Angular. ...................................................... 48
Figura 30 Importar el Service Worker en el módulo de la aplicación Angular. ........................................ 49
Figura 31 Aplicación sin el uso de las tecnologías web progresivas........................................................ 50
Figura 32 Iconos de acceso directo de la aplicación web progresiva como nativas. ................................ 50
6
Figura 33 Aplicación web progresiva en una computadora de escritorio................................................ 51
Figura 34 Aplicación web progresiva en un dispositivo móvil. ............................................................... 51
7
Resumen
Para cumplir con esto se identifica los conceptos, características y principios de una
aplicación web progresiva. Con los conceptos de PWA se investigará las tecnologías
necesarias para realizar una aplicación web progresiva. Luego se realizó una auditoria
de una aplicación web progresiva con Lighthouse.
8
Introducción
En la actualidad existe aplicaciones móviles para los usuarios finales, pero estos
dependen que sean desarrollados exclusivamente para este tipo de entornos, empleado
un lenguaje de programación, librerías, y otros conjuntos de herramientas para la
construcción de estas aplicaciones.
9
El resultado de la siguiente monografía ayudará a las personas interesadas a
comprender conceptos, como construir aplicaciones web progresivas, como auditar una
aplicación para comprobar si cumplimos con los requerimientos de una aplicación web
progresiva y como emplear Angular para este tipo de aplicaciones.
10
1. Generalidades
Vivimos en una era digital de muchos cambios, tenemos nuevas tecnologías de información
y comunicación. Las páginas web ahora existentes proveen de servicios a sus usuarios para
realizar cualquier tipo de trabajo. Con el boom de los dispositivos móviles, muchos usuarios
acceden a las aplicaciones web a través de estos, y esperan tener la mejor experiencia en
cuanto a: las imágenes, el contenido, tablas, gráficos, los botones y otras opciones que se
puedan ver de manera adecuada y sean lo más parecido a una aplicación nativa.
2. Metodología
11
3. Aplicaciones web progresivas
Para la construcción de una aplicación web progresiva es necesario el estudio de los conceptos,
fundamentos y tecnologías sobre las aplicaciones web progresivas.
3.1. Definición
Como lo definió Google en su Web, las Progressive Web Apps (PWA) son “experiencias que
combinan lo mejor de la Web y lo mejor de las apps”. Están disponibles para los usuarios a
partir de la primera visita en una pestaña del navegador y no requieren instalación. A
medida que el usuario genera progresivamente una relación con la aplicación con el paso
del tiempo, ésta se hace más y más poderosa. Se carga rápidamente, incluso con redes
débiles, envía notificaciones push relevantes, tiene un ícono en la pantalla principal y se
carga como experiencia de pantalla completa y de primer nivel”. (Google, Progressive Web
Apps ILT - Concepts, s.f.).
Este nuevo nivel de calidad, permite que las aplicaciones web progresivas ganen un
lugar en la pantalla de inicio del usuario.
3.1.2. Fiables
Cuando se inician desde la pantalla de inicio del usuario, los “Service Workers” permiten
que una aplicación web progresiva se cargue instantáneamente, independientemente del
estado de la red.
Un Service Worker, escrito en JavaScript, es como un proxy del lado del cliente y
permite controlar el caché y cómo responder a las solicitudes de recursos. Por el
12
precaching de los recursos clave puede eliminar la dependencia de la red, lo que
garantiza una experiencia instantánea y confiable para sus usuarios.
3.1.3. Veloces
Se conoce que un 53% de los usuarios abandonará un sitio si tarda más de 3 segundos
en cargar y una vez que se carga, los usuarios esperan que sean rápidos, sin necesidad
de desplazamiento lento o interfaces lentas para responder. (Google, Progressive Web
Apps, s.f.)
3.1.4. Atractivas
Las aplicaciones web progresivas son instalables y viven en la pantalla de inicio del
usuario, sin la necesidad de una tienda de aplicaciones. Ofrecen una experiencia
inmersiva de pantalla completa, con la ayuda de un archivo de manifiesto de aplicación
web e incluso pueden volver a atraer a los usuarios con notificaciones push web.
El término “responsive web design” fue acuñado por Ethan Marcotte. En su artículo
seminal de List Apart (Marcotte, 2010), consolidó tres técnicas existentes (diseño de
cuadrícula flexible, imágenes flexibles y consultas de medios y medios) en un enfoque
unificado y lo llamó diseño web receptivo. El término se usa a menudo para inferir el
mismo significado que una serie de otras descripciones tales como diseño de fluidos,
diseño elástico, diseño de líquidos, diseño adaptativo, diseño de dispositivos cruzados y
diseño flexible.
Sin embargo, como el Sr. Marcotte y otros han argumentado elocuentemente, una
metodología verdaderamente receptiva es en realidad más que simplemente alterar el
diseño de un sitio basado en tamaños de ventanas. En cambio, es invertir todo nuestro
enfoque actual para el diseño web. En lugar de comenzar con un diseño de sitio de
escritorio de ancho fijo y escalarlo y volver a fluir el contenido para ventanas pequeñas,
13
primero se debe diseñar para la ventana gráfica más pequeña y luego mejorar
progresivamente el diseño y el contenido para las ventanas más grandes. (Frain, 2012)
Un diseño web responsivo manejará el flujo del contenido de una página a medida
que las ventanas gráficas cambien, pero veamos más allá. HTML5 ofrece más que
HTML 4 y sus elementos semánticos más significativos formarán la base de nuestro
marcado. Las consultas de medios de CSS3 son un ingrediente esencial para un
diseño receptivo, pero los módulos CSS3 adicionales permiten niveles de flexibilidad
nunca antes vistos. Abandonaremos franjas de gráficos de fondo y JavaScript
complicado, reemplazándolos con degradados, sombras, tipografía, animaciones y
transformaciones de CSS3. Antes de seguir con la creación de un diseño web
impulsado por HTML5 y CSS3.
Los Service Worker son trabajadores scripts que se ejecutan en segundo plano. Escrito
en JavaScript con unas pocas líneas de código, permiten a un desarrollador interceptar
las solicitudes de red, manejar mensajes push y realizar muchas otras tareas.
Lo mejor de todo, si el navegador de un usuario no es compatible con los trabajadores
del servicio, retrocede y su sitio web funciona como un sitio web normal. (Hume, 2018)
La razón por el cual el API de un Service Worker es tan emocionante es porque permite
soportar experiencias fuera de línea, otorgando a los desarrolladores control total sobre
la experiencia.
Antes del Service Worker, existía otra API que proporcionaba a los usuarios una
experiencia fuera de línea en la web llamada AppCache. Pero hay una serie de
problemas con la API AppCache que los Service Worker fueron diseñados para evitar.
Los aspectos que se debe tener en cuenta sobre un trabajador de servicios son:
• Es un trabajador de JavaScript, por lo que no puede acceder al DOM
directamente. En cambio, un Service Worker puede comunicarse con las páginas
que controla, al responder a los mensajes enviados a través de la interfaz
postMessage, y esas páginas pueden manipular el DOM si es necesario.
14
• El Service Worker es un proxy de red programable que permite controlar cómo se
manejan las solicitudes de red desde su página.
• Finaliza cuando no se usa y se reinicia cuando es necesario, por lo que no se
puede confiar en el estado global de los encargados de onfetch y onmessage de
un Service Worker. Si hay información que necesita persistir y reutilizar durante
reinicios, los trabajadores del servicio tienen acceso a la API IndexedDB.
15
Figura 1 Ciclo de vida de un Service Worker
Fuente: (Hume, 2018)
3.2.2.2. Requisitos
16
3.2.2.3. Registro de un Service Worker
Para instalar un Service Worker, debe iniciar el proceso registrando este en la página.
Esto le dice al navegador dónde vive su archivo JavaScript de Service Worker.
Una sutilidad con el método register() es la ubicación del archivo de Service Worker. En
este caso, se nota que el archivo del trabajador del servicio está en la raíz del dominio.
Esto significa que el alcance del Service Worker será el origen completo. En otras
palabras, este trabajador de servicio recibirá eventos de búsqueda para todo en este
dominio. Si se registra el archivo del Service Worker en /example/sw.js, entonces el
Service Worker solo observara los eventos de búsqueda para las páginas cuyo URL
comience con /example/.
17
Para el ejemplo más básico, se debe definir callback para el evento de instalación y
decidir qué archivos desea almacenar en caché.
Dentro del callback de instalación, se debe seguir los siguientes pasos:
1. Abre un caché.
2. Guarda en caché los archivos.
3. Confirme si todos los activos requeridos están en la memoria caché o no.
18
3.2.2.5. Cacheo y retorno de peticiones
19
3.2.2.6. Actualización del Service Worker
3. En este punto, el Service Worker anterior todavía está controlando las páginas
actuales, por lo que el nuevo Service Worker entrará en estado de espera.
5. Una vez que el nuevo Service Worker tome el control, se activará el evento de
activación.
20
La parte de arquitectura aparece cuando es momento de decidir cómo va a separar el
contenido estático (el App Shell) de su contenido dinámico. (Sheppard, 2017)
Para aplicaciones de una sola página con arquitecturas con mucho código JavaScript,
una App Shell es un enfoque acertado. Este enfoque se basa en almacenar la Shell
agresivamente en caché (utilizando un Service Worker para lograr que la aplicación
funcione. El contenido dinámico carga cada página a través de JavaScript.
21
3.2.3.1. Beneficios
Algunos de los beneficios de una arquitectura de App Shell con un Service Worker:
3.2.3.2. Requisitos
• Cargarse rápidamente.
• Usar la menor cantidad de datos posible
• Usar recursos estáticos de una caché local
• Separar contenido de la navegación.
• Recuperar y mostrar contenido específico de la página (HTML, JSON, etc.)
• Opcionalmente, almacenar en caché contenido dinámico
Estructura la aplicación para una distinción clara entre la App Shell de la página y el
contenido dinámico. En general, la aplicación debe cargar la Shell más simple
posible, pero debe incluir contenido de página significativo con la descarga inicial. En
22
este punto es necesario determinar el balance correcto entre velocidad y
actualización de datos para cada fuente de datos.
El manifiesto de las apps web es un archivo JSON que proporciona a los desarrolladores
un lugar centralizado para colocar los metadatos asociados a una aplicación web. Estos
metadatos incluyen, entre otros, el nombre de la aplicación web, los enlaces a íconos,
así como la URL preferida para abrir cuando un usuario inicia la aplicación web. El
manifiesto también permite a los desarrolladores declarar una orientación
predeterminada para su aplicación web, así como proporcionar la capacidad de
establecer el modo de visualización para la aplicación (por ejemplo, en pantalla
completa). Además, el manifiesto permite a un desarrollador alcanzar una aplicación
23
web a una URL. Esto restringe las URL a las que se aplica el manifies to y proporciona
un medio para enlace profundo en una aplicación web desde otras aplicaciones. (Ater,
2017)
24
Los manifiestos de las aplicaciones web permiten guardar un marcador de sitio en la
pantalla de inicio de un dispositivo. Cuando un sitio se inicia de esta manera:
• Tiene un ícono y un nombre únicos para que los usuarios puedan diferenciarlo de
otros sitios.
• Muestra algo al usuario mientras se descargan los recursos o se restauran a
partir del caché.
• Proporciona características predeterminadas de visualización al navegador para
evitar una transición demasiado brusca cuando los recursos del sitio se
encuentren disponibles.
25
4. Aplicación web progresiva con Angular
Para la construcción de una aplicación web progresiva con Angular es necesario el estudio de
los fundamentos y arquitectura de una aplicación con esta librería.
4.1. Definición
Angular es una plataforma que facilita la creación de aplicaciones con la web. Angular
combina plantillas declarativas, inyección de dependencia, herramientas de extremo a
extremo y mejores prácticas integradas para resolver los desafíos de desarrollo. Angular
permite a los desarrolladores crear aplicaciones que se ejecutan en la web, el dispositivo
móvil o el escritorio. (Google, Angular Documentation, s.f.)
4.2. Fundamentos
4.2.1. Arquitectura
Los bloques de construcción básicos de una aplicación Angular son NgModules, que
proporcionan un contexto de compilación para los componentes. NgModules recopilan
código relacionado en conjuntos funcionales; una aplicación Angular está definida por un
conjunto de NgModules. Una aplicación siempre tiene al menos un módulo raíz que
habilita el arranque, y generalmente tiene muchos más módulos de características.
Los componentes definen vistas, que son conjuntos de elementos de pantalla que
Angular puede elegir y modificar según la lógica y los datos de su programa.
Los componentes usan servicios que proporcionan una funcionalidad específica que no
está directamente relacionada con las vistas. Los proveedores de servicios pueden
inyectarse en componentes como dependencias, haciendo que el código sea modular,
reutilizable y eficiente.
Tanto los componentes como los servicios son simplemente clases, con decoradores
que marcan su tipo y proporcionan metadatos que le dicen a Angular cómo usarlos.
Los metadatos de una clase de componente lo asocian con una plantilla que define una
vista. Una plantilla combina HTML común con directivas angulares y marcado de enlace
que permiten a Angular modificar el HTML antes de representarlo para su visualización.
26
Los metadatos de una clase de servicio proporcionan la información que Angular
necesita para ponerla a disposición de los componentes a través de la inyección de
dependencia (DI).
4.2.2. Módulos
27
de servicios y otros archivos de código cuyo alcance está definido por el NgModule que
lo contiene. Pueden importar funcionalidad que se exporta desde otros NgModules y
exportar la funcionalidad seleccionada para que otros NgModules puedan utilizarla.
(Google, Angular Documentation, s.f.)
Una de las grandes ideas detrás de Angular es la idea de los componentes. En las
aplicaciones con angular, se escribe el marcado HTML que se convierte en la aplicación
interactiva, pero el navegador solo entiende un conjunto limitado de etiquetas de
marcado; Complementos como <select> o <form> o <video> tienen funcionalidad
definida por el creador de navegador. ¿Qué pasa si se quiere registrar las nuevas
etiquetas del navegador? ¿Qué pasaría si se quisiera tener una etiqueta <weather> que
muestre el clima? ¿O qué pasa si se quiere crear una etiqueta <login> que muestre un
panel de inicio de sesión? Esta es la idea fundamental detrás de los componentes:
mostrar al navegador nuevas etiquetas que tienen funcionalidad personalizada adjunta a
ellas. (Nate Murray, pág. 12)
Un componente controla una parte de pantalla llamado vista, este es conocido como la
plantilla de un componente.
4.2.4. Formularios
Los formularios son probablemente el aspecto más importante de una aplicación web.
Aunque a menudo se obtiene eventos de clicks en enlaces o moviendo el mouse, es a
través de los formularios que se obtiene la mayor parte de entrada de datos de los
usuarios.
Resulta que los formularios pueden ser muy complejas. Aquí hay algunas razones por
las cuales:
• Las entradas de formulario están destinadas a modificar datos, tanto en la página
como en el servidor.
• Los cambios a menudo deben reflejarse en otra parte de la página
• Los usuarios tienen mucha libertad de acción en lo que ingresan, por lo es
necesario validar.
• La UI necesita establecer claramente las expectativas y los errores, si los hay.
• Los campos dependientes pueden tener una lógica compleja.
• Poder probar los formularios, sin depender de los selectores de DOM.
28
Afortunadamente, Angular tiene herramientas para ayudar con todas estas cosas.
• FormControls - Las entradas en los formularios y dar objetos para trabajar con
ellos.
• Validators - Dan la posibilidad de validar las entradas, de la manera que se
quiera.
• Observers – Permite que los formularios puedan ver cambios y responda en
consecuencia. (Murray, Coury, Lerner, & Taborda, 2018)
En Angular se configura las rutas por mapeo de rutas al componente que las manejará.
Hay tres componentes principales que se utiliza para configurar el enrutamiento en
Angular:
• Routes - Describe las rutas compatibles con la aplicación.
• RouterOutlet - Es un componente "marcador de posición" que muestra Angular
dónde ubicar el contenido de cada ruta
• RouterLink - Directiva que se usa para enlazar las rutas.
Una arquitectura de App Shell es una forma de crear una aplicación web progresiva que
se carga al instante y de manera confiable en la pantalla de un usuario, en forma similar
a lo que se ve en las aplicaciones nativas. La arquitectura que una App Shell puede
tener son:
29
4.2.6.1. Cargador
El ejemplo más común de App Shell es el cargador (o spinner), que es visible para los
usuarios hasta que la aplicación y los datos estén listos.
4.2.6.2. Cabecera
30
Figura 9 Ejemplo de un manifiesto en una aplicación Angular.
Fuente: Elaboración propia.
31
Figura 10 Agregar un manifiesto en una aplicación Angular.
Fuente: Elaboración propia.
Como puede ver en la configuración, se debe incluir iconos de diferentes tamaños para
el proyecto es necesario encontrar los tamaños indicados en el manifiesto. Es importante
el uso .png para los iconos de una aplicación.
Es necesario agregar al index.html la siguiente la siguiente definición:
32
Figura 12 Comando para agregar librerías para service worker en una aplicación Angular.
Fuente: Elaboración propia.
33
Ahora es necesario habilitar Service Worker en el proyecto en el archivo .angular-
cli.json.
34
Ahora es necesario hacer el build de la aplicación. Es muy importante usar la bandera
prod.
Figura 16 Comando para hacer build de una aplicación Angular con Service Worker.
Fuente: Elaboración propia.
Los pasos anteriores son obligatorios y en la mayoría de los casos redundantes, porque
la CLI angular puede hacer todo el trabajo para el paso de compilación.
Cuando iniciamos una aplicación angular desde cero se puede usar este flag al
momento de generar el proyecto.
Figura 17 Comando para crear una aplicación Angular como aplicación web progresiva.
Fuente: Elaboración propia.
35
5. Uso de herramientas para la auditoria de una aplicación web progresiva
Las aplicaciones web progresivas (PWA) son confiables, rápidas y atractivas, aunque hay
muchas cosas que pueden llevar a una PWA desde una experiencia inicial a una
experiencia ejemplar.
Para ayudar a los equipos a crear las mejores experiencias posibles, se ha preparado una
lista de verificación que analiza todas las cosas que se consideran necesarias para ser una
aplicación web progresiva base.
➢ Prueba - Usa Lighthouse para verificar que la aplicación corre sobre HTTPS.
➢ Solución - Implemente HTTPS y revise “letsencrypt.org” para iniciar.
➢ Prueba -
• Use Lighthouse para verificar sí todos los diseños son aptos para
dispositivos móviles, aunque la verificación manual también puede ser
útil.
• Revise la prueba amigable móvil
➢ Solución - Considere la implementación de un diseño receptivo o la
prestación adaptativa de un sitio compatible con las vistas.
36
5.1.1.4. Metadatos proporcionados para agregar home screen
➢ Prueba - Use Lighthouse para verificar si el usuario tiene acceso para agregar
la aplicación al home screen.
➢ Solución - Agregue un archivo de manifiesto de aplicación web a su proyecto.
Las transiciones deben sentirse rápidas mientras toca, incluso en una red lenta, una clave
para percibir el rendimiento.
➢ Prueba – Se debe probar la aplicación en una red muy lenta simulada. Cada
vez que se toca un enlace / botón en la aplicación, la página debe responder
de inmediato, ya sea por:
• Pase de inmediato a la siguiente pantalla y muestre una pantalla de
carga de marcador de posición mientras espera contenido de la red.
37
• Se muestra un indicador de carga mientras la aplicación espera una
respuesta de la red.
➢ Solución - Si usa una aplicación de una sola página (cliente renderizado),
realice la transición del usuario a la página siguiente inmediatamente muestre
una pantalla de esqueleto y use cualquier contenido, como el título o la
miniatura, ya disponible mientras se carga el contenido.
Lighthouse está disponible como una extensión de Chrome para Chrome 52 (y posterior) y
una herramienta de línea de comandos.
38
5.2.1. Corre Lighthouse como una extensión Chrome
Lighthouse genera una página HTML con los resultados. Una página de ejemplo se
muestra a continuación.
Figura 18 Ejemplo de una auditoría realizada con Lighthouse en una aplicación web.
Fuente: Elaboración propia.
Se puede ejecutar Lighthouse desde la línea de comando (por ejemplo, para integrarlo
con un proceso de compilación), está disponible como un módulo de nodo.
Puede descargar Node desde nodejs.org (seleccione la versión que mejor se adapte a
su entorno y sistema operativo).
Para instalar el módulo Nodo de Lighthouse desde la línea de comando, se debe usar el
siguiente comando:
npm install -g lighthouse
Esto instala la herramienta globalmente. Luego puede ejecutar Lighthouse desde la línea
de comandos:
39
lighthouse <url>
Puede verificar las banderas y opciones de Lighthouse con el siguiente comando:
lighthouse –help
40
Figura 19 Estructura mínima de un archivo manifest.json.
Fuente: Elaboración propia.
41
6. Aplicación de caso de estudio
Para la construcción y migración de una aplicación angular a una aplicación web progresiva, se
empleó los conceptos que define una aplicación web progresiva, uso de tecnologías para la
agregación de un Service Worker, diseño responsivo, definición de un archivo manifiesto,
herramienta de auditoria y pruebas del uso de la aplicación en un dispositivo móvil.
Figura 20 Opciones para auditar una aplicación web progresiva con Lighthouse.
Fuente: Elaboración propia.
42
Estos son los resultados en el proyecto:
Los resultados son: cumplimiento en un alto porcentaje para la “accesibilidad” y las “mejores
prácticas”, pero con PWA la aplicación es deficiente.
Afortunadamente, se puede ver los detalles en la siguiente parte con más información que
Lighthouse provee:
43
Con esos números y la lista generada para corregir, se tiene un punto de inicio.
Un Shell de aplicación es la interfaz de usuario mínima que el usuario verá lo antes posible.
El Shell de la aplicación debe cargarse muy rápido para captar los ojos del usuario y hacer
que espere todo el contenido.
6.3.1. Cargador
El ejemplo más común de Shell de aplicaciones es loader (o spinner), que es visible para
los usuarios hasta que la aplicación y los datos estén listos.
6.3.2. Cabecera
6.3.3. JS Fallback
44
Figura 24 Index.html para cuando los scripts no están disponibles.
Fuente: Elaboración propia.
Como se muestra en la auditoria, se tiene una advertencia roja que indica que falta el
manifiesto. Se agregará este al proyecto.
45
Figura 25 Manifiesto de la aplicación del caso de estudio.
Fuente: Elaboración propia.
Como puede ver en la configuración, se debe incluir iconos de diferentes tamaños para el
proyecto.
46
Figura 27 Agregando el manifiesto en el archivo index.html.
Fuente: Elaboración propia.
47
Figura 28 Archivo de configuración para el Service Worker de la aplicación.
Fuente: Elaboración propia.
Entonces, se necesita habilitar el service worker para el proyecto con el archivo .angular-
cli.json:
48
Ahora es necesario registrar el Service Worker en la aplicación angular, agregue la siguiente
línea al archivo app.module.ts:
Ahora que la aplicación puede correr como una aplicación nativa podemos ver los
resultados comparado con nuestra aplicación web sin usar las tecnologías para las
aplicaciones web progresivas.
49
Figura 31 Aplicación sin el uso de las tecnologías web progresivas.
Fuente: Elaboración propia
50
Figura 33 Aplicación web progresiva en una computadora de escritorio.
Fuente: Elaboración propia.
51
Podemos notar que la diferencia de la aplicación es distinta a una aplicación web normal,
porque tenemos accesos directo en los dispositivos, no hacen uso del navegador y corren
como si fueras aplicaciones nativas.
7. Conclusiones
Después de haber concluido con la investigación sobre aplicaciones web progresivas, tomando
en cuenta los fundamentos, conceptos, tecnologías, como auditar este tipo de aplicaciones y
como construir o migrar una aplicación de este tipo. Se puede concluir lo siguiente:
➢ Respecto a los fundamentos sobre una aplicación web progresiva, se ve que estos
disponen de muchas buenas características que se espera en una aplicación; que sean
“fiables”, veloces y atractivas para el usuario. También se ve que este se apoya en
tecnologías existentes como ser Service Worker, diseño responsivo con CSS and HTML,
el uso de cache del navegador y definición de un archivo manifiesto.
➢ Sobre el empleo de Angular para construir aplicaciones web progresivas, se puede
concluir que este reúne varios de los requerimientos que una aplicación web progresiva
necesita, el empleo de librerías para el diseño de los formularios, el uso de servicios
para obtener información, permite el cacheo fácil de estos y también que la librería
dispone de varios comandos para construir una aplicación web progresiva.
➢ Respecto al uso de herramientas para auditar una aplicación web progresiva, si se
cumple con las características y tecnologías; disponemos de una herramienta
Lighthouse. Este es muy útil al momento de construir una aplicación puesto que muestra
a través de métricas el porcentaje que se cumple de los requerimientos necesarios para
una aplicación web progresiva.
➢ Sobre el caso de estudio, se puede comprobar lo fácil que es crear o migrar una
aplicación Angular para que este sea aplicación web progresiva. Se pudo comprobar
que los conceptos que define una aplicación web progresiva son aplicables en una
aplicación Angular, dispone de comandos para agregar el Service Worker, o crear una
aplicación que contenga todo lo necesario para que se pueda iniciar una aplicación
desde cero.
52
Bibliografía
Ater, T. (2017). Building Progressive Web Apps - Bringing the Power of Native to the Browser.
Frain, B. (2012). Responsive Web Design with HTML5 and CSS3. Packt Publishing Ltd.
Hume, D. A. (2018). Progressive Web Apps.
Marcotte, E. (2010). Responsive Web Design. Obtenido de https://alistapart.com:
https://alistapart.com/article/responsive-web-design
Murray, N., Coury, F., Lerner, A., & Taborda, C. (2018). ng-book The Complete Guide to Angular.
Nate Murray, F. C. (s.f.). Making aComponen. En F. C. Nate Murray, ng-book The Complete Guide to
Angular (pág. 12).
Sheppard, D. (2017). Beginning Progressive Web App Development - Creating a Native App Experience on
the Web.
Páginas Web
53