Navegação na Web mais rápida com pré-busca preditiva

Saiba mais sobre a pré-busca preditiva e como ela é implementada pelo Guess.js.

Na sessão Navegação na Web mais rápida com pré-busca preditiva do Google I/O 2019, comecei falando sobre a otimização de apps da Web com divisão de código e as possíveis implicações de desempenho para a navegação posterior nas páginas. Na segunda parte, discutimos como melhorar a velocidade de navegação usando o Guess.js para configurar a pré-busca preditiva:

Divisão de código para apps da Web mais rápidos

Os aplicativos da Web são lentos e o JavaScript está entre os recursos mais caros que você envia. Aguardar o carregamento de um app da Web lento pode frustrar os usuários e diminuir as conversões.

Apps da Web lentos são estressantes.

O carregamento lento é uma técnica eficiente para reduzir os bytes de JavaScript transferidos pela rede. É possível usar várias técnicas de carregamento lento do JavaScript, incluindo as seguintes:

  • Divisão de código no nível do componente
  • Divisão de código no nível do trajeto

Com a divisão de código no nível do componente, é possível mover componentes individuais em blocos JavaScript separados. Em eventos específicos, você pode carregar os scripts relevantes e renderizar os componentes.

Com a divisão de código no nível da rota, no entanto, você move rotas inteiras em blocos independentes. Quando os usuários fazem a transição de uma rota para outra, precisam baixar o JavaScript associado e inicializar a página solicitada. Essas operações podem causar atrasos significativos, especialmente em redes lentas.

Pré-busca do JavaScript

A pré-busca permite que o navegador faça o download e armazene em cache recursos que o usuário provavelmente vai precisar em breve. O método mais comum é usar <link rel="prefetch">, mas há duas armadilhas comuns:

  • A pré-busca de muitos recursos (overfetch) consome uma grande quantidade de dados.
  • Talvez alguns recursos necessários para o usuário nunca sejam pré-buscados.

A pré-busca preditiva resolve esses problemas usando um relatório com os padrões de navegação dos usuários para determinar quais recursos devem ser pré-buscados.

Exemplo de pré-busca

Pré-busca preditiva com o Guess.js

A Guess.js é uma biblioteca JavaScript que oferece a funcionalidade de pré-busca preditiva. A Guess.js consome um relatório do Google Analytics ou de outro provedor de análise para criar um modelo preditivo que pode ser usado para pré-buscar de maneira inteligente apenas o que o usuário provavelmente precisa.

O Guess.js tem integrações com Angular, Next.js, Nuxt.js e Gatsby (links em inglês). Para usá-la no seu aplicativo, adicione estas linhas à configuração do webpack para especificar um ID da vista do Google Analytics:

const { GuessPlugin } = require('guess-webpack');

// ...
plugins: [
   // ...
   new GuessPlugin({ GA: 'XXXXXX' })
]
// ...

Se você não usa o Google Analytics, é possível especificar um reportProvider e fazer o download dos dados do seu serviço favorito.

Integração com frameworks

Para saber mais sobre como integrar o Guess.js ao seu framework favorito, confira estes recursos:

Para um tutorial rápido sobre a integração com o Angular, confira este vídeo:

Como o Guess.js funciona?

Veja como o Guess.js implementa a pré-busca preditiva:

  1. Primeiro, ele extrai dados para os padrões de navegação do usuário do seu provedor de análise favorito.
  2. Em seguida, ele mapeia os URLs do relatório para os blocos de JavaScript produzidos pelo webpack.
  3. Com base nos dados extraídos, ele cria um modelo preditivo simples das páginas que um usuário pode acessar em qualquer página.
  4. Ele invoca o modelo para cada bloco do JavaScript, prevendo os outros blocos que provavelmente serão necessários a seguir.
  5. Ele adiciona instruções de pré-busca a cada bloco.

Quando o Guess.js terminar, cada fragmento terá instruções de pré-busca semelhantes a:

__GUESS__.p(
  ['a.js', 0.2],
  ['b.js', 0.8]
)

Este código gerado pelo Guess.js está instruindo o navegador a considerar a pré-busca do bloco a.js com probabilidade 0.2 e do bloco b.js com probabilidade 0.8.

Depois que o navegador executa o código, o Guess.js verifica a velocidade da conexão do usuário. Se for suficiente, o Guess.js vai inserir duas tags <link rel="prefetch"> no cabeçalho da página, uma para cada fragmento. Se o usuário estiver em uma rede de alta velocidade, o Guess.js fará a pré-busca dos dois blocos. Se o usuário tiver uma conexão de rede ruim, o Guess.js fará a pré-busca apenas do fragmento b.js, porque ele tem alta probabilidade de ser necessário.

Saiba mais

Para saber mais sobre o Guess.js, confira estes recursos: