1001Ferramentas
⚙️ Dev

Gerador de service-worker.js

Gera um service worker básico com estratégia cache-first ou network-first e lista de assets para precache.

service-worker.js:

Cache offline sem depender do Workbox

Você quer que a página abra mesmo sem rede, mas escrever um service worker do zero significa acertar três eventos e o ciclo de vida entre eles. Escolha a estratégia (cache-first ou network-first), dê um nome de versão ao cache e liste os arquivos do precache, um por linha. A saída é um service-worker.js completo, com install, activate limpando caches antigos e o fetch já ignorando requisições que não sejam GET.

O install usa addAll, que é tudo ou nada: se um único caminho da lista devolver 404, a instalação inteira falha e o service worker nunca ativa. É de longe a causa mais comum do famoso não registra. Vale saber também que nenhuma das duas estratégias grava resposta nova no cache durante a navegação, só o que estava na lista. É para isso que serve o campo de versão: publicou arquivo novo, troca v1 por v2 e o activate apaga o cache anterior.

Registre com navigator.serviceWorker.register e sirva o arquivo da raiz do site, porque o escopo é a pasta onde ele está: em /js/ ele só controla /js/. Exige HTTPS, com localhost como exceção. O código gerado chama skipWaiting e clients.claim, então a versão nova assume na hora, enquanto a aba aberta ainda roda o JavaScript antigo; se preferir a troca só no próximo carregamento, apague essas duas linhas. A geração é local.

Perguntas frequentes

Cache-first ou network-first, qual escolher?
Cache-first para assets com hash no nome, que nunca mudam de conteúdo. Network-first para HTML e dados que mudam com frequência.
Por que o site não atualiza depois do deploy?
No cache-first o arquivo em cache é entregue indefinidamente, porque a resposta da rede nunca é gravada por cima. Mude o valor da versão do cache e publique de novo.
O network-first funciona offline?
Só para os arquivos da lista de precache. E o fallback acontece quando a requisição falha de verdade: um 500 do servidor é uma resposta válida e passa direto para a página.

Ferramentas Relacionadas