Superwebapps: Repensando las Aplicaciones de Escritorio con Progressive Web Apps

Rate this content
Bookmark

Las aplicaciones web progresivas describen un conjunto completamente nuevo de características del navegador que permiten formas completamente nuevas de interactuar con las aplicaciones web.

Aunque originalmente se pensaron como una alternativa a las aplicaciones móviles, estamos viendo cada vez más aplicaciones de escritorio que dependen de la plataforma web. Photoshop, Visual Studio Code, Squoosh, Clipchamp y toda la suite de Google Office son solo algunos ejemplos de un número creciente de aplicaciones de escritorio completamente basadas en la web: ¡Superwebapps!.

En esta charla, nos centraremos en algunas de las nuevas y emocionantes capacidades del navegador que nos permiten crear potentes aplicaciones React que facilitan nuestra vida diaria. Por supuesto, incluiremos ejemplos tangibles y una visión general de la hoja de ruta del navegador.

This talk has been presented at React Summit 2024, check out the latest edition of this React Conference.

Nico Martin
Nico Martin
22 min
18 Jun, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
MDEdit es una herramienta que convierte Markdown en HTML y proporciona un editor de lo que ves es lo que obtienes. Las aplicaciones web progresivas ofrecen una experiencia de usuario comparable tanto en dispositivos de escritorio como en dispositivos móviles. El Service Worker permite que las aplicaciones web sigan funcionando incluso sin conexión a Internet. Las API de Almacenamiento Persistente y Manejo de Archivos permiten que las aplicaciones web almacenen datos y accedan a archivos en el dispositivo del cliente. Project Fugu proporciona nuevas API, incluida la API de Acceso a Fuentes, para cerrar la brecha entre las aplicaciones nativas y las aplicaciones web.

1. Introducción a MDEdit y Progressive Web Apps

Short description:

MDEdit es una herramienta que convierte Markdown en HTML y proporciona un editor de lo que ves es lo que obtienes. Quiere leer archivos, escribir archivos y funcionar sin conexión. Es una Súper Aplicación Web, que une la brecha entre el navegador y las aplicaciones nativas. Las aplicaciones web progresivas ofrecen una experiencia de usuario comparable tanto en dispositivos de escritorio como en dispositivos móviles. Deben ser rápidas, integradas, confiables y atractivas. El Manifiesto de la Aplicación Web y el Service Worker son conceptos fundamentales introducidos por los navegadores para resolver estos problemas.

Hola a todos. Mi nombre es Nico. Soy un desarrollador front-end de Suiza, y aquí conmigo está MDEdit. MDEdit es una herramienta que convierte Markdown en HTML, y luego proporciona un editor de lo que ves es lo que obtienes que te permite, o que te ayuda, a escribir HTML que luego se convertirá de nuevo en Markdown. En otras palabras, es una aplicación de edición de Markdown o un sitio web de edición de Markdown. Quiero decir, MDEdit está un poco en una crisis de identidad, porque ¿qué es? ¿Es un sitio web? ¿Es una aplicación? ¿Es una herramienta que utiliza HTML, CSS y JavaScript? Pero quiere hacer mucho más. Quiere leer archivos. Quiere escribir archivos. Quiere funcionar sin conexión. Así que es más bien una aplicación web con superpoderes. Hablando de superpoderes, ¿tenemos aquí algún fanático clásico de los cómics de DC? ¿Lo tenemos? Bueno, tal vez podamos ayudar a mi pequeño amigo. Porque ¿qué es? ¿Es un sitio web? ¿Es una aplicación? ¿Es un pájaro? Para decirlo de manera sencilla, es una Súper Aplicación Web, o al menos eso es lo que habrían sido llamadas si me hubieran dado la oportunidad de nombrar esas cosas. Desafortunadamente, o también afortunadamente para todos los demás, Alex Russell fue mucho antes que yo, y en ese entonces trabajaba en Google, y estaba pensando mucho en cómo unir la brecha entre el navegador y las aplicaciones nativas. Y estaba pensando en sitios web a los que se les podían otorgar más y más permisos. Se convertirían progresivamente en aplicaciones. Así que acuñó el término aplicaciones web progresivas. Y tal vez ya hayas escuchado mucho sobre aplicaciones web progresivas en términos de aplicaciones móviles. Sin embargo, la web es única en el sentido de que no está diseñada para un sistema operativo específico o una resolución de pantalla específica, sino que debería funcionar de manera universal. Por lo tanto, me gustaría centrarme en algunas de las capacidades que también permiten a las aplicaciones web de escritorio tener algunos superpoderes. Pero empecemos con lo básico. La pregunta subyacente para las aplicaciones web que se ejecutan tanto en escritorio como en móvil es, ¿qué problemas necesitan resolver para ofrecer una experiencia de usuario verdaderamente comparable? En primer lugar, deben ser rápidas, porque no queremos tener un spinner de carga si haces clic en una aplicación o en un archivo. Debería estar ahí de inmediato. Debe estar integrada, por lo que debería sentirse como parte del sistema operativo, una extensión del sistema operativo. Debe ser confiable, incluso si no tenemos conexión a Internet o tenemos una mala conexión a Internet, deberíamos poder usar la aplicación. Y debe ser atractiva, por lo que deberíamos poder volver a interactuar con nuestros usuarios, por ejemplo, mediante notificaciones push. Para resolver esos problemas, los navegadores tuvieron que introducir dos nuevos conceptos fundamentales, el Manifiesto de la Aplicación Web y el Service Worker. El Manifiesto de la Aplicación Web, lo siento, es básicamente solo un JavaScript, un archivo JSON que contiene información sobre la aplicación. Primero, necesitamos registrar el manifiesto, que básicamente es una línea de HTML que apunta a el archivo, y luego el archivo en sí contiene información como el título, el nombre corto, la descripción, los colores, y eso es todo. Entonces mi navegador, en este caso, Edge, sabe que ahora tenemos una PWA instalable, y ofrece instalarla. Hay más y más propiedades capaces que veremos en esta charla.

2. El Service Worker y la Independencia de la Red

Short description:

El Service Worker es un fragmento de JavaScript que vive en un ámbito separado y puede escuchar eventos, interactuar con el sitio y permanecer activo incluso si se cierra el navegador. Podemos registrar el Service Worker y definir su ámbito. Dentro del Service Worker, tenemos escuchadores de eventos para los eventos de Instalación, Activación, Obtención y Envío. El Service Worker permite que nuestra súper aplicación web siga funcionando incluso sin conexión a Internet, ya que se encuentra entre el sitio web y la Internet y puede interactuar con el almacenamiento de la aplicación.

Lo segundo más importante es el Service Worker. Primero que nada, mi aplicación es una aplicación JavaScript, por lo que hay mucha lógica de aplicación escrita en JavaScript, lo cual es genial porque realmente me gusta JavaScript. Pero nuevamente, tan pronto como cerramos el sitio, tan pronto como cerramos el navegador, simplemente, JavaScript está muerto. Ya no hay cosas sucediendo dentro de nuestro app.js, por lo que ya no podemos interactuar con él. El Service Worker también es un fragmento de JavaScript, pero vive en un ámbito separado. Se registra entre la aplicación web y el navegador, y allí puede escuchar eventos, interactuar con el sitio, incluso si el navegador está cerrado, por lo que permanece allí para siempre. No está vinculado al ciclo de vida de nuestra aplicación. Para registrar el Service Worker, podemos llamar a esta función navigator.serviceworker.register, que apunta al Service Worker. Tiene algunos parámetros opcionales como el ámbito, por lo que en nuestro caso, nuestro Service Worker controla todo, nuestro sitio y todas las subcarpetas también. También podemos crear un nuevo Service Worker que controle ámbitos específicos dentro de nuestra aplicación, por lo que podríamos tener el Service Worker de Acerca de que solo controle todo dentro de esta carpeta de Acerca de, por ejemplo. Y luego, dentro del Service Worker, es solo JavaScript. Tenemos escuchadores de eventos, por lo que cada vez que alguien visita la página, se dispara este evento de Instalación. Luego, una vez que ocurrió la instalación, tenemos el evento de Activación. Luego, cada solicitud pasa por el Service Worker con el evento de Obtención, y también si alguien intenta alcanzar nuestro Service Worker desde algún servidor, por ejemplo, tenemos el evento de Envío al que podemos escuchar. Hasta ahora, todo bien. Pero volvamos a nuestra súper aplicación web y sus superpoderes. Comencemos con el problema número uno, la Súper Aplicación Web y el sueño de la independencia de la red. Es un hermoso día, el sol brilla, nuestra súper aplicación web intenta solicitar algunos recursos del servidor, hace una solicitud al servidor, regresa con la respuesta, todo está bien. Pero de repente, la conexión a Internet se ha ido. Lo siento, ahí vamos. Diferente. La conexión a Internet se ha ido, y bueno, Donasaurio aparece, muerte segura para todas las aplicaciones web clásicas. No es así para nuestra súper aplicación web, porque tenemos el superpoder del Service Worker. Ahora el Service Worker se encuentra entre el sitio web y la Internet, y también puede interactuar con el almacenamiento de la aplicación. Entonces, incluso si se pierde la conexión a Internet, todavía tenemos una fuente confiable para atender nuestras solicitudes. ¿Cómo podemos usarlo? En este caso, tenemos nuestro SVG, tenemos una imagen de respaldo SVG y queremos mostrar el respaldo SVG cuando falla una solicitud de una imagen SVG. En primer lugar, en el evento de instalación, abrimos la caché, luego colocamos este respaldo SVG en la caché. Luego, una vez que tenemos el evento de obtención, primero verificamos si el recurso solicitado es realmente un SVG. Si ese es el caso, tenemos event.responseWith, que básicamente se hace cargo de la solicitud. Allí podemos pasar la solicitud al servidor.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Diseño Dirigido por Dominio con Aplicaciones Vue
Vue.js London 2023Vue.js London 2023
14 min
Diseño Dirigido por Dominio con Aplicaciones Vue
Top Content
Welcome to this talk on domain-driven design in Vue.js application. Today we are going to look into domain-driven design, its benefits and how it works with Vue.js domain-driven design versus the MVVM model. Vue.js thrives in domain-driven design, a design approach that models software to match a domain. DDD emphasizes understanding business logic and creating a domain that reflects the language and concepts. Integrating DDD in Vue.js offers benefits such as effective modeling of complex business domains, structured code reflecting domain logic, and easier onboarding and ownership.
Cómo compartir código entre una aplicación web de React y una aplicación móvil de React Native en Monorepo
React Summit 2022React Summit 2022
7 min
Cómo compartir código entre una aplicación web de React y una aplicación móvil de React Native en Monorepo
This presentation focuses on sharing code between React web and React native mobile apps. The speaker demonstrates how to achieve feature parity using a Monorepo with NX. They highlight the importance of sharing non-UI code, such as business logic and state management, through shared libraries. This approach allows the apps to focus on UI code while keeping non-UI code separate. For more details, refer to the speaker's blog post.
Cargadores de datos: Mejorando la obtención de datos en Vue
Vue.js Live 2024Vue.js Live 2024
30 min
Cargadores de datos: Mejorando la obtención de datos en Vue
Data loaders provide a solution for complex and repetitive data fetching in Vue.js applications. Using data loaders allows for more independent data fetching and integrates with the navigation cycle. The data loader plug-in adds a navigation guard for data fetching and loading. Lazy loading and caching can be implemented using Pina Colada and Glada loaders. These loaders can improve the performance and speed of data fetching in applications.
La próxima ola de frameworks web es BYOJS
JSNation 2022JSNation 2022
23 min
La próxima ola de frameworks web es BYOJS
The next wave of web frameworks is BYOJS, covering the history and evolution of building web applications. The evolution of web frameworks and build systems includes popular choices like React, Angular, and Vue, as well as advanced build systems like Webpack and Rollup. The rise of performance measurement tools and the adoption of the Jamstack have led to improved web performance. The Jamstack architecture focuses on pre-rendering pages, decoupling APIs and services, and enhancing pages with JavaScript. Astro, a static site generator with SSR support, promotes the islands architecture and partial hydration.
¡MIDI en el Navegador... ¡Vamos a Rockear la Web!
JSNation 2022JSNation 2022
28 min
¡MIDI en el Navegador... ¡Vamos a Rockear la Web!
MIDI is a versatile communication protocol that extends beyond music and opens up exciting possibilities. The Web MIDI API allows remote access to synths and sound modules from web browsers, enabling various projects like music education systems and web audio-based instruments. Developers can connect and use MIDI devices easily, and the Web MIDI API provides raw MIDI messages without semantics. The WebMidi.js library simplifies working with the Web MIDI API and offers a user-friendly interface for musicians and web developers. MIDI on the web has generated significant interest, with potential for commercial growth and endless possibilities for web developers.
Usando Next.JS y Redux para aplicaciones web épicas sin JavaScript
React Advanced 2021React Advanced 2021
21 min
Usando Next.JS y Redux para aplicaciones web épicas sin JavaScript
This Talk explores developing web applications that work without JavaScript enabled in the browser, while still enjoying the benefits of modern web technologies. The speaker demonstrates converting an existing application to work without JavaScript by wrapping buttons in a form and preventing the default submit event. React helpers are introduced to handle async actions and the speaker shows how to make a counter app work without JavaScript by removing unnecessary callbacks and changing buttons to a button component. The talk also covers adding a form and a surprise feature, and emphasizes that by leveraging forms and an event-based store, applications can seamlessly work with or without JavaScript.

Workshops on related topic

Accesibilidad web en aplicaciones JavaScript
React Summit 2022React Summit 2022
161 min
Accesibilidad web en aplicaciones JavaScript
Workshop
Sandrina Pereira
Sandrina Pereira
A menudo vemos que JavaScript daña la accesibilidad de un sitio web. En esta masterclass, aprenderás cómo evitar errores comunes y cómo utilizar JS a tu favor para mejorar la accesibilidad de tus aplicaciones web.
En esta masterclass exploraremos múltiples ejemplos del mundo real con problemas de accesibilidad, y aprenderás cómo hacer que funcionen para las personas que utilizan un mouse o un teclado. También aprenderás cómo se utilizan los lectores de pantalla, ¡y te mostraré que no hay razón para tener miedo de usar uno!
Únete a mí y déjame mostrarte cómo la accesibilidad no limita tus soluciones o habilidades. ¡Al contrario, las hace más inclusivas!
Al final, serás capaz de:- Comprender los principios de WCAG y cómo están organizados- Conocer casos comunes en los que JavaScript es esencial para la accesibilidad- Crear enlaces, botones y elementos conmutables inclusivos- Utilizar regiones en vivo para errores y estados de carga- Integrar la accesibilidad en el flujo de trabajo de tu equipo de inmediato- Darte cuenta de que crear sitios web accesibles no es tan difícil como parece ;)
Construye una Biblioteca Universal de Datos Reactiva con Starbeam
JSNation 2023JSNation 2023
66 min
Construye una Biblioteca Universal de Datos Reactiva con Starbeam
WorkshopFree
Yehuda Katz
Yehuda Katz
Esta sesión se centrará en los bloques de construcción universales de Starbeam. Usaremos Starbeam para construir una biblioteca de datos que funcione en múltiples frameworks.Escribiremos una biblioteca que almacene en caché y actualice datos, y admita relaciones, ordenación y filtrado.En lugar de obtener datos directamente, funcionará con datos obtenidos de forma asíncrona, incluidos los datos obtenidos después de la representación inicial. Los datos obtenidos y actualizados a través de web sockets también funcionarán bien.Todas estas características serán reactivas, por supuesto.Imagina que filtras tus datos por su título y luego actualizas el título de un registro para que coincida con el filtro: cualquier resultado que dependa de los datos filtrados se actualizará para reflejar el filtro actualizado.En 90 minutos, construirás una increíble biblioteca de datos reactiva y aprenderás una nueva herramienta poderosa para construir sistemas reactivos. La mejor parte: la biblioteca funciona en cualquier framework, incluso si no piensas en (o dependes de) ningún framework al construirla.
Tabla de contenidos- Almacenar un registro obtenido en una celda- Almacenar múltiples registros en un Mapa reactivo- La iteración reactiva es una iteración normal- El filtrado reactivo es un filtrado normal- Obtener más registros y actualizar el Mapa- La ordenación reactiva es una ordenación normal (¿se está volviendo un poco repetitivo?)- Modelar la invalidación de la caché como datos- Bonus: relaciones reactivas
Construye aplicaciones Web3 con React
React Summit 2022React Summit 2022
51 min
Construye aplicaciones Web3 con React
WorkshopFree
Shain Dholakiya
Shain Dholakiya
El masterclass está diseñado para ayudar a los desarrolladores Web2 a comenzar a construir para Web3 utilizando el Hyperverse. El Hyperverse es un mercado abierto de módulos inteligentes construidos por la comunidad, auditados y fáciles de descubrir. Nuestro objetivo es hacer que sea fácil para los desarrolladores de React construir aplicaciones Web3 sin escribir una sola línea de código de contrato inteligente. Piensa en 'npm para contratos inteligentes'.
Aprende más sobre el Hyperverse aquí.
Repasaremos todos los conceptos básicos de blockchain/crypto que necesitas saber para comenzar a construir en el Hyperverse, por lo que no necesitas tener ningún conocimiento previo sobre el espacio Web3. Solo necesitas tener experiencia en React.
Construyendo Aplicaciones Web Modernas impulsadas por CMS con Strapi el CMS Headless de código abierto
React Advanced 2021React Advanced 2021
159 min
Construyendo Aplicaciones Web Modernas impulsadas por CMS con Strapi el CMS Headless de código abierto
Workshop
Daniel Madalitso Phiri
Daniel Madalitso Phiri
En esta masterclass, construiremos un sitio web completamente funcional y un blog integrado con Next.js y Strapi.

Tabla de contenidos:
- Una introducción a los CMS Headless y las arquitecturas compatibles
- Puesta en marcha con Strapi y Next.js
- Integración de la funcionalidad de blog en una aplicación Next.js
- Despliegue de tus aplicaciones Next.js y Strapi (Bonus)
- Implementación de vistas previas de contenido con Next.js

Requisitos previos:Conocimientos básicos de React Conocimientos básicos de Node.js y npm Conceptos básicos de la web.