Entonces, lo primero que estamos haciendo aquí es crear una variable llamada counter y la estamos asignando a cero. A continuación, estamos asignando un método on install en nuestro objeto self y eso nos dice cuándo se está instalando el service worker. Así que, en este caso, solo vamos a registrar un mensaje de que la instalación ocurrió.
Después de eso, tenemos un on activate, y esto nos dice que se llama cuando el service worker alcanza la etapa o estado de activación, por así decirlo, estos service workers actúan como una máquina de estados. Entonces, esto sucede, solo vamos a registrar un mensaje de que el service worker ahora está activo, pero luego también vamos a hacer algo más que es un poco interesante. Cuando un service worker se activa por primera vez, cualquier página que esté abierta, las solicitudes que envíen no se enviarán inmediatamente a través de este service worker. No es hasta que la página se actualiza que esas páginas están bajo el control del service worker. Entonces, lo que estamos haciendo aquí en la parte inferior, estamos llamando a event.waitUntil, que acepta una promesa, y la promesa es el resultado de la llamada self.clients.claim. Así que, básicamente, eso está diciendo que las páginas que están actualmente abiertas, el service worker interceptará la solicitud. Muy bien.
Entonces, el archivo continúa, y aquí está la segunda mitad. También tenemos este manejador on fetch. Este manejador on fetch, se llama cada vez que el service worker recibe una solicitud de red de una de las páginas web. Así que, dentro de este, lo que estamos haciendo es primero registrar la URL que se recibió. A continuación, tenemos una declaración if, así que aquí, verificamos para ver si la URL que se recibió termina en data.json. Si no lo hace, entonces saltamos al final y recurrimos esencialmente a una solicitud HTTP normal. Así que, aquí, tenemos este evento que responde con, y eso acepta una promesa que se resuelve en un valor que se le da al navegador como resultado de la solicitud. Y así, el valor que le estamos dando es entonces la respuesta de fetch, que es una promesa, y luego el argumento que estamos proporcionando a fetch es la solicitud entrante, que es event.request. Así que, esencialmente, lo que esa línea está diciendo es simplemente realizar una solicitud normal y realmente no hacer nada con ella. Sin embargo, si la URL terminaba en data.JSON, ejecutamos el cuerpo de esa declaración if. Así que, lo que hacemos allí es incrementar esa variable counter de antes, y luego simplemente llamamos a event.respondWith, puedes ignorar ese return void, pero simplemente llamamos a event.respondWith, donde pasamos una nueva respuesta que estamos creando desde cero. Y así, el cuerpo de esa respuesta es un objeto JSON que contiene nuestro counter en la variable. Y luego, solo para fines ilustrativos, estamos configurando los encabezados, así que en este caso, estamos configurando el tipo de contenido a text.JSON. Y así, si realmente ejecutamos este código, estos son los registros que veremos. Así que, lo primero que vemos es que el service worker está instalado. A continuación, vemos que el service worker ha sido activado. Y luego, finalmente, vemos que el cambio de controlador ha ocurrido. Nuevamente, el orden de estos mensajes es no determinista, ya que el navegador, ya sabes, puede manejar un registro y almacenarlo en memoria. Bueno, imprimirá un registro desde otra ubicación. Así que, el orden de esto, esos primeros dos mensajes, no está garantizado.
Comments