"Speed up Service Worker with Navigation Preloads" es muy útil cuando explica qué es la precarga de navegación y los beneficios que ofrece para las apps web cuyos service worker no controlan solicitudes de navegación de forma explícita.
¿Qué hace este módulo?
workbox-navigation-preload
controlará la verificación durante el tiempo de ejecución para ver si el navegador actual admite la precarga de navegación. Si es así, creará automáticamente un controlador de eventos activate
para habilitarla.
El código compartido dentro de workbox-core
que controla las solicitudes de red en todo Workbox también se actualizó para aprovechar automáticamente una respuesta de precarga, si está disponible. Esto significa que cualquiera de las estrategias integradas puede aprovechar automáticamente la precarga de navegación, una vez que esté habilitada.
¿Quién debe habilitar las precargas de navegación?
Los desarrolladores que ya controlan las navegaciones respondiendo con HTML prealmacenado en caché (posiblemente configurado con un resguardo de App Shell) no necesitan habilitar la precarga de navegación. El objetivo de esta función es reducir la latencia de navegación de los desarrolladores que no pueden almacenar previamente en caché su HTML, pero desean usar Workbox para manejar el almacenamiento en caché de otros elementos en sus sitios.
Por ejemplo, si sigues el patrón de shell de app y ya tienes una ruta de navegación configurada para usar el HTML almacenado en caché, habilitar la precarga de navegación será un desperdicio. La respuesta de red asociada con la solicitud de precarga nunca se usará, ya que el HTML previamente almacenado en caché se usará de forma incondicional.
Uso básico
import * as navigationPreload from 'workbox-navigation-preload';
import {NetworkFirst} from 'workbox-strategies';
import {registerRoute, NavigationRoute} from 'workbox-routing';
// Enable navigation preload.
navigationPreload.enable();
// Swap in NetworkOnly, CacheFirst, or StaleWhileRevalidate as needed.
const strategy = new NetworkFirst({
cacheName: 'cached-navigations',
plugins: [
// Any plugins, like `ExpirationPlugin`, etc.
],
});
const navigationRoute = new NavigationRoute(strategy, {
// Optionally, provide a allow/denylist of RegExps to determine
// which paths will match this route.
// allowlist: [],
// denylist: [],
});
registerRoute(navigationRoute);
¿Cuál es la historia de asistencia del navegador?
Actualmente, Google Chrome es el único navegador que admite la precarga de navegación.
enable()
verificará la compatibilidad del navegador durante el tiempo de ejecución y solo intentará habilitar la precarga de navegación si el navegador actual lo admite. Por lo tanto, es
seguro llamar a enable()
de manera incondicional en tu service worker.
Debes tener en cuenta que estos navegadores no se beneficiarán de la reducción de la latencia de navegación, y se recomienda medir con cuidado las implicaciones de rendimiento de enviar un service worker que no controla solicitudes de navegación y que no use la precarga de navegación.
Métodos
disable()
workbox-navigation-preload.disable()
Si el navegador admite la precarga de Navigation, esta opción la inhabilitará.
enable()
workbox-navigation-preload.enable(
headerValue?: string,
)
Si el navegador admite la precarga de navegación, esta acción la habilitará.
Parámetros
-
headerValue
cadena opcional
isSupported()
workbox-navigation-preload.isSupported()
Devuelve
-
boolean
Indica si el navegador actual admite o no la habilitación de la precarga de navegación.