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

A partir de Chrome 123, la API de enrutamiento estático de Service Worker está disponible. Esta API te permite declarar de forma declarativa 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 el lanzamiento de la API en Chrome 123.

Cómo usar la API

Para usar la llamada a la API 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 solicitud.
  • runningStatus: Es una cadena, ya sea "running" o "not-running". Esto 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 trabajador de servicio si está en ejecución. 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 a un formulario se envían directamente a la red y omiten el trabajador de servicio.

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

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

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

Cambios desde la prueba de origen

La prueba de origen original usaba InstallEvent.registerRouter() en lugar de InstallEvent.addRoutes(), y solo se podía llamar al método registerRouter() 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 fuente adicionales.

Compatibilidad con 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, esto se indica en la columna de tamaño. Cuando colocas 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.

El ID del router tal como se muestra en el panel Red