Skip to content
Latchkey

O que é um Service Worker? Um proxy dentro do navegador

Um service worker é um script que o navegador executa em segundo plano, ficando entre seu app e a rede para poder interceptar requisições e servir respostas em cache.

Um service worker é o motor por trás do suporte offline e do cache avançado em web apps modernos. Uma vez registrado, ele roda separadamente de qualquer página e pode interceptar cada requisição de rede que o app faz. Esse poder o torna central para os PWAs, mas também torna o versionamento e as atualizações uma preocupação cuidadosa em tempo de build.

Como ele intercepta requisições

Após o registro e a ativação, o service worker lida com eventos fetch dentro do seu escopo. Ele pode retornar uma resposta em cache, buscar da rede ou combinar ambos com estratégias como cache-first ou network-first.

O ciclo de vida

Um service worker instala, ativa e então controla as páginas. Uma nova versão instala em segundo plano e espera até que as páginas existentes fechem antes de assumir, o que impede que duas versões rodem ao mesmo tempo, mas significa que as atualizações não são instantâneas.

O que ele habilita

  • Acesso offline ao servir assets em cache.
  • Carregamentos repetidos mais rápidos a partir de caches locais.
  • Background sync e push notifications onde houver suporte.

O risco de cache obsoleto

Um service worker mal configurado pode prender os usuários a assets antigos, servindo um app obsoleto mesmo depois de você fazer o deploy. Os nomes de cache e os precache manifests precisam mudar a cada build para que o worker saiba que deve buscar a nova versão.

Service workers em CI/CD

A etapa de build gera o service worker e um precache manifest listando os arquivos de asset com hash desta release. Como o manifest é vinculado a hashes de conteúdo, cada build de CI produz um worker que sabe exatamente quais arquivos mudaram, então os usuários atualizam de forma limpa em vez de ficarem presos em código antigo.

Principais conclusões

  • Um service worker intercepta requisições de rede para habilitar suporte offline e cache.
  • Seu ciclo de vida espera as páginas antigas fecharem, então as atualizações não são instantâneas.
  • O CI gera um precache manifest vinculado a hashes de conteúdo para que os usuários atualizem de forma limpa.

Guias relacionados