Usa la API de enrutamiento estático de service worker para omitir el service worker en rutas específicas.

A partir de Chrome 123, está disponible la API de Service Worker Static Routing. Esta API te permite declarar cómo se deben recuperar ciertas rutas de recursos, lo que significa que el navegador no necesita ejecutar un service worker solo para recuperar respuestas de una caché o directamente de la red. Esta API se encuentra en prueba de origen desde Chrome 116, y en esta publicación se detalla su lanzamiento en Chrome 123.

Cómo usar la API

Para usar la llamada a la API, llama a event.addRoutes en el evento install del trabajador de servicio. Pasa a este método una lista de rutas con las siguientes propiedades:

condition
Especifica cuándo se aplica la regla. Acepta las siguientes propiedades:
  • urlPattern: Es una instancia de URLPattern o una cadena que representa un URLPattern válido que se puede pasar al constructor URLPattern.
  • requestMethod: Es una cadena que contiene un método de solicitud.
  • requestMode: Es una cadena que contiene un modo de solicitud.
  • requestDestination: Es una cadena que contiene un destino de la solicitud.
  • runningStatus: Es una cadena, ya sea "running" o "not-running". Indica el estado de ejecución del Service Worker.
source
Especifica cómo se cargan los recursos que coinciden con condition. Una de las siguientes cadenas:
  • "network"
  • "cache"
  • "fetch-event"
  • "race-network-and-fetch-handler"

En el siguiente ejemplo, las URLs que comienzan con "/articles" se enrutan al service worker si se está ejecutando. Cuando hay varias condiciones, por ejemplo, urlPattern y runningStatus, se deben cumplir todas para que se use la ruta.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {

          urlPattern: "/articles/*",
          runningStatus: "running"
    },
    source: "fetch-event"
  });
});

En el siguiente ejemplo, las publicaciones en un formulario se envían directamente a la red y omiten el service worker.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {
          urlPattern: "/form/*",
          requestMethod: "post"
    },
    source: "network"
  });
});

En el siguiente ejemplo, el almacenamiento de caché llamado "pictures" se usa para recuperar archivos con una extensión de archivo .png o .jpg.

addEventListener('install', (event) => {
  event.addRoutes({
    condition: {
      or: [
        {urlPattern: "*.png"},
        {urlPattern: "*.jpg"}
      ]
    },
    source: {
      cacheName: "pictures"
    }
  });
});

Cambios desde la prueba de origen

En la prueba de origen original, se usaba InstallEvent.registerRouter() en lugar de InstallEvent.addRoutes(), por lo que el método registerRouter() solo se podía llamar una vez. Este cambio se basó en los comentarios de la comunidad sobre la prueba de origen.

La nueva API también aprovecha los cambios en URLPattern que se introdujeron en Chrome 121, agrega la capacidad de especificar un método, un modo y un destino de solicitud, y agrega opciones de origen adicionales.

Compatibilidad en las Herramientas para desarrolladores de Chrome

Las reglas del router registradas se muestran en la pestaña Service Worker del panel Application.

Las reglas del router destacadas en el panel Application

En el panel Network, si la solicitud coincide con la regla registrada, se indica en la columna de tamaño. Cuando mantienes el puntero sobre la columna de tamaño, se muestra el ID del router registrado. Las reglas correspondientes se muestran en la pestaña de la aplicación.

Es el ID del router tal como se muestra en el panel de red.