caixa de trabalho-navegação-pré-carregamento

O artigo Acelerar o service worker com pré-carregamentos de navegação explica muito bem o que é o pré-carregamento de navegação e os benefícios que ele oferece para apps da Web cujo service worker não processa explicitamente solicitações de navegação.

O que esse módulo faz?

O workbox-navigation-preload vai processar a verificação durante a execução para saber se o navegador atual oferece suporte ao pré-carregamento de navegação. Se sim, ele vai criar automaticamente um manipulador de eventos activate para ativá-lo.

O código compartilhado em workbox-core que processa solicitações de rede em todo o Workbox também foi atualizado para aproveitar automaticamente uma resposta de pré-carregamento, se disponível. Isso significa que qualquer uma das estratégias integradas pode aproveitar automaticamente o pré-carregamento de navegação, assim que ele for ativado.

Quem deve ativar os carregamentos prévios de navegação?

Os desenvolvedores que já estão processando navegações respondendo com HTML pré-armazenado em cache (provavelmente configurado com um substituto do shell do app) não precisam ativar o pré-carregamento de navegação. O objetivo desse recurso é reduzir a latência de navegação para desenvolvedores que não podem pré-cachear o HTML, mas ainda querem usar o Workbox para gerenciar o armazenamento em cache de outros recursos nos sites.

Por exemplo, se você estiver seguindo o padrão de shell do app e já tiver uma rota de navegação configurada para usar o HTML pré-armazenado em cache, ativar o carregamento prévio de navegação será um desperdício. A resposta da rede associada à solicitação de pré-carregamento nunca será usada, já que o HTML pré-armazenado em cache será usado 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);

Qual é a história de suporte ao navegador?

No momento, o Google Chrome é o único navegador que oferece suporte ao pré-carregamento de navegação. O enable() vai verificar o suporte do navegador no momento da execução e tentar ativar o carregamento prévio de navegação somente se o navegador atual for compatível. Portanto, é seguro chamar enable() incondicionalmente no service worker.

Esses navegadores não vão se beneficiar da redução da latência de navegação. É recomendável medir cuidadosamente as implicações de desempenho ao enviar um worker de serviço que não processa solicitações de navegação nem usa o pré-carregamento de navegação.

Métodos

disable()

workbox-navigation-preload.disable()

Se o navegador oferecer suporte ao pré-carregamento de navegação, ele será desativado.

enable()

workbox-navigation-preload.enable(
  headerValue?: string,
)

Se o navegador oferecer suporte ao pré-carregamento de navegação, ele será ativado.

Parâmetros

  • headerValue

    string opcional

isSupported()

workbox-navigation-preload.isSupported()

Retorna

  • booleano

    Se o navegador atual oferece suporte para ativar o carregamento prévio de navegação.