Trabajador de servicio de PWA para tontos

Publicado: 2020-08-27

Tabla de contenido

El hecho es que el trabajador de servicios tiene un papel importante que desempeñar en los próximos años, y cuanto más rápido pueda familiarizarse con esta nueva tecnología, mejor podrá adaptarse a este nuevo futuro de la Web.

Es por eso que, para ayudarlo a conocer mejor esta nueva tecnología, juntos tendremos una discusión sobre los trabajadores de servicios: qué es, qué aporta a la Web, cómo podemos prepararnos mejor para esta nueva tecnología de La web.

¿Qué es un trabajador de servicios?

Definiciones

Considerada universalmente como la tecnología que hace o deshace las PWA, el trabajador del servicio es una API que se ejecuta independientemente del navegador y es responsable de la intercepción de la red, y debido a esto, puede hacer muchas de las cosas que antes eran imposibles en la Web. Los sitios web (típicamente PWA) controlados por los trabajadores del servicio pueden tener una integración más profunda con el dispositivo en uso y, en consecuencia, traer más capacidades de hardware y funciones similares a las aplicaciones a la Web (por ejemplo, notificaciones automáticas, sincronización en segundo plano y más).

Cómo funciona

En una palabra. service worker es esencialmente una capa basada en eventos entre el navegador y el servidor que intercepta, modifica y maneja las solicitudes de red salientes:

Cómo funciona el trabajador de servicio

Y dado que el trabajador de servicio es el de uno basado en eventos , responde y se comunica solo a través de eventos, y usa promesas para saber cuándo se completa una operación. Sin embargo, toda la recepción de eventos (p. ej., fetch y push ) solo es posible cuando el trabajador del servicio está activo , lo que indica cuándo el navegador reconoce y registra el trabajador del servicio (y también cuando el trabajador del servicio ha terminado de instalarse con éxito) . De forma simplificada, este es el ciclo de vida típico de un service worker:

Ciclo de vida del trabajador de servicio

Además, tome nota de todos estos eventos disponibles en Service Worker:

Eventos de trabajadores de servicio
Resumen del evento de trabajador de servicio disponible [Fuente: Mozilla]

Todos los eventos funcionales ( fetch , sync y push ) deberían explicarse por sí mismos, ya que son los eventos que generan casi todas las características progresivas de PWA (es decir, capacidades sin conexión, sincronización en segundo plano, notificaciones push).

 Lectura recomendada: ¿Qué es PWA? Todo lo que necesita saber sobre las aplicaciones web progresivas

Restricciones para los trabajadores de servicios

Dado que este es un script que se ejecuta independientemente del navegador, existen algunas restricciones:

  • Protocolo HTTPS : los trabajadores del servicio deben ejecutarse en sitios web basados ​​en HTTPS
  • Sin acceso a localStorage , DOM y la ventana.
  • scope limitado : los trabajadores del servicio solo pueden operar en el scope del directorio actual (y subdirectorios) en el que se encuentra service-worker.js .
  • Asíncrono : los trabajadores del servicio son de naturaleza asíncrona, por lo que confían en las API basadas en Promise.

Qué significan los trabajadores de servicios para PWA

Como se indicó anteriormente, el trabajador de servicio es la columna vertebral de PWA, sin el cual muchas de las características revolucionarias de PWA simplemente no serían posibles. Esencialmente, lo que hace el trabajador de servicio es proporcionar los medios para:

Mejor presentación

El rendimiento en visitas repetidas es significativamente mejor en una PWA, ya que los trabajadores de servicios ayudan enormemente con el proceso de almacenamiento en caché. En comparación con el caché web típico (caché HTTP) que se usa en la mayoría de los sitios web, PWA se destaca en el suministro de contenido incluso en condiciones de red desfavorables:

Comparación de tiempos promedio de carga de página

Todo esto es gracias al hecho de que los trabajadores del servicio dan a los desarrolladores total libertad para exactamente qué y cómo se realiza el almacenamiento en caché. Para ver cuánto mejor es el rendimiento de almacenamiento en caché de los trabajadores de servicios, recomendamos el estudio reciente de Google: Medición del impacto del rendimiento en el mundo real de los trabajadores de servicios. El estudio tiene una metodología clara, centrada en el tiempo hasta la primera pintura como medida para determinar el desempeño de los trabajadores de servicios.

En promedio, las páginas se cargaron un poco más rápido cuando un trabajador del servicio controlaba la página que sin un trabajador del servicio, tanto para los visitantes nuevos como para los que regresan.

Philip Walton, Midiendo el impacto del desempeño en el mundo real de los trabajadores de servicios

Acceso sin conexión

Cuando se registran, los trabajadores del servicio almacenan en caché el contenido necesario para su sitio de PWA y lo sirven después. Esto hace que los sitios web con tecnología PWA puedan funcionar sin conexión, ya que los usuarios aún pueden interactuar con el sitio y ver todo el contenido almacenado en caché.

Ver contenido incluso cuando no esté conectado con Service Worker

Esto no quiere decir que el acceso sin conexión sea una característica nunca antes vista en la Web; era posible brindarles a los usuarios una experiencia sin conexión en la Web, es solo que la experiencia no fue óptima (consulte La memoria caché de la aplicación es un idiota) y el servicio Los trabajadores se inventaron para abordar (o más bien, evitar) los inconvenientes de AppCache.

 Lectura recomendada: Cómo hacer que tu PWA funcione sin conexión

Características de la aplicación nativa

Además de ofrecer acceso sin conexión y un rendimiento mejorado, los trabajadores del servicio también sirven como base para más funciones similares a las de una aplicación, como notificaciones automáticas y sincronización en segundo plano (y en un futuro próximo, geofencing y sincronización periódica). La función de notificaciones push de PWA, por ejemplo, se ensambla utilizando dos API: la API de notificaciones y la API Push, ambas construidas sobre la API Service Worker.

Ciclo de vida de un service worker

La vida útil de un servicio consta de tres partes: registro, instalación y activación, todo lo cual se detallará a continuación:

Registro

El primer paso que debemos hacer es registrar el trabajador de servicio. Sin este paso, el navegador no sabrá dónde se encuentra su trabajador de servicio y, por lo tanto, será imposible instalar el trabajador de servicio en segundo plano.
Podemos registrar al service worker usando el siguiente código:

 if('serviceWorker' en el navegador) {
    navigator.serviceWorker.register('./pwa-examples/simicart/sw.js', {alcance: './sw-alcance/'})
.entonces((reg) => {
   // el registro funcionó
       console.log('Registro exitoso. El alcance es ' + reg.scope);
};

El código anterior primero comenzará a buscar la API de Service Worker en el navegador y, si el navegador es compatible con dicha API, registra un nuevo service worker mediante el método serviceworkerContainer.register() y brinda un scope del service worker. Por ejemplo, en el código anterior, nuestro scope es /pwa-examples/simicart/ , lo que significa que nuestro service worker solo funcionaría para páginas que comienzan con /pwa-examples/simicart/ . Llamamos a estas páginas ' páginas controladas '.

Instalación

Ahora que el navegador sabe dónde está nuestro trabajador del servicio, y cuál es su alcance, intentará instalar el trabajador del servicio. Puede optar por no hacer nada durante esta fase, pero aún así nos gustaría señalar que esta es la fase en la que ocurre la mayor parte del proceso de almacenamiento en caché. Por ejemplo, así es típicamente como se realiza el proceso de almacenamiento en caché de activos:

 const cacheName = 'sitio-caché-v1'
const activosEnCache = [
    '/pwa-ejemplos/',
    '/pwa-ejemplos/index.html',
    '/pwa-examples/css/styles.css',
    '/pwa-examples/js/app.js',
]

self.addEventListener('instalar', (evento) => {
    evento.esperarhasta(  
        caches.open(cacheName).then((cache) => {
              return cache.addAll(assetsToCache);
        })
      );
});

Como puede ver en el ejemplo anterior, usamos la API de caché para almacenar en caché nuestros activos que luego usaremos para hacer que nuestra PWA sea compatible sin conexión. Este proceso de almacenamiento en caché ocurre durante el evento de instalación.

Activación

Después de la etapa de instalación, ahora podemos activar el trabajador de servicio. Sin embargo, esta etapa de activación normalmente no ocurre automáticamente, y para que el trabajador del servicio se active, debe asegurarse de que no haya ningún trabajador del servicio controlando las páginas actualmente.

Alternativamente, también puede automatizar el proceso de activación de su trabajador de servicio utilizando el método skipWaiting() .

 const cacheName = 'sitio-caché-v1'
const activosEnCache = [
    '/pwa-ejemplos/',
    '/pwa-ejemplos/index.html',
    '/pwa-examples/css/styles.css',
    '//pwa-ejemplos/js/app.js',
]
self.addEventListener('instalar', (evento) => {
    self.skipWaiting(); // omitir la espera
    evento.esperarhasta(  
        caches.open(cacheName).then((cache) => {
              return cache.addAll(assetsToCache);
        })
      );
});

La web necesita trabajadores de servicio

En este punto, todos podemos estar de acuerdo en que el trabajador de servicio es casi un paso eventual que debe dar la Web. Los usuarios son cada vez más exigentes con las funciones similares a las aplicaciones y, combinado con el hecho de que PWA se está convirtiendo en el futuro de la entrega de software, parece que la Web tiene mucho potencial en los próximos años.

Ver esta publicación en Instagram

Hoy en día, la web es una plataforma increíblemente poderosa, pero aún existe una brecha entre lo que pueden hacer las aplicaciones web y las capacidades de las aplicaciones nativas. Las aplicaciones web progresivas nos hacen parte del camino, pero para competir de verdad, la web también necesita acceso a API más potentes. Bueno, ¡buenas noticias! ¡Ellos vienen! Escuche esta charla titulada "Reducir la brecha de las aplicaciones nativas" de Sam Richard para obtener más información sobre las API nuevas y futuras. . . #SimiCart #ChromeDevSummit #ChromeDevSummit #SamRichard #pwa #nativeapp

Una publicación compartida por SimiCart (@simicart.official) en

Para los comerciantes de Magento que buscan transformar el escaparate, ofrecemos una solución de PWA sin interfaz completa y rentable para su negocio.

Desarrolle su tienda Magento PWA