Service Worker PWA

PWA
Tempo de leitura: 4 minutos

Service Worker PWA: O Service Worker (SW) é o pilar tecnológico mais crucial de um Progressive Web App (PWA). Trata-se de um script JavaScript que roda em segundo plano, separado da página principal e atua como um proxy (intermediário) entre o navegador e a rede.

Ele é o responsável por interceptar requisições, gerenciar o cache e habilitar funcionalidades de aplicativos nativos, como o funcionamento offline e as Notificações Push.

1. 📝 O Registro (Frontend – index.html)

O Service Worker deve ser explicitamente registrado pelo seu código JavaScript na página principal.

  • Verificação de Compatibilidade: O registro só pode ocorrer se o navegador do usuário suportar a API.
  • Escopo: O Service Worker só pode controlar as páginas que estão sob seu caminho de arquivo. Se o service-worker.js estiver na raiz (/), ele controla todo o site (/*).

Código de Registro (JavaScript no seu HTML)

JavaScript

if ('serviceWorker' in navigator) {
  // Garante que o registro só ocorra após o carregamento da página
  window.addEventListener('load', () => { 
    navigator.serviceWorker.register('/service-worker.js', { scope: '/' })
      .then(registration => {
        console.log('SW registrado. Escopo:', registration.scope);
      })
      .catch(error => {
        console.error('Falha no registro do SW:', error);
      });
  });
}

2. 🔁 O Ciclo de Vida do Service Worker

O SW passa por estados distintos que determinam quando ele pode ser usado. O desenvolvedor deve anexar lógica a esses eventos.

Evento/EstadoAçãoPropósito
installOcorre a primeira vez que o SW é baixado e detectado.Pré-caching: Ideal para armazenar ativos estáticos essenciais (offline shell).
activateOcorre quando a nova versão do SW assume o controle da página.Limpeza: Usado para apagar caches antigos de versões anteriores.
fetchOcorre para cada requisição de rede feita pela página controlada.Estratégias de Cache: Onde você decide buscar o recurso (Cache ou Rede).

A. O Evento install (SW Script)

Durante a instalação, usamos event.waitUntil() para garantir que o SW não seja instalado até que a Promise de abertura e preenchimento do cache seja resolvida com sucesso.

JavaScript

const CACHE_NAME = 'cache-v1'; // Versão do Cache
const URLS_TO_CACHE = ['/', '/index.html', '/style.css', '/app.js'];

self.addEventListener('install', event => {
  console.log('SW: Evento Install');
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(cache => {
        console.log('SW: Pré-caching de assets...');
        return cache.addAll(URLS_TO_CACHE);
      })
  );
});

B. O Evento activate (SW Script)

É onde a limpeza de caches antigos ocorre, geralmente comparando o CACHE_NAME atual com os nomes existentes.

JavaScript

self.addEventListener('activate', event => {
  console.log('SW: Evento Activate');
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          if (cacheName !== CACHE_NAME) {
            console.log('SW: Deletando cache antigo:', cacheName);
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

3. 📡 O Evento fetch e Estratégias de Cache (SW Script)

O evento fetch é a parte mais dinâmica. Ele é acionado para cada requisição HTTP/HTTPS. A lógica aqui implementa a estratégia de cache (ex: Cache First, Network Fallback).

JavaScript

self.addEventListener('fetch', event => {
  // event.respondWith permite que o SW intercepte e responda
  event.respondWith(
    caches.match(event.request) // 1. Tenta encontrar a requisição no cache
      .then(response => {
        // 2. Se a resposta existir no cache, retorna ela imediatamente (Cache First)
        if (response) {
          return response;
        }
        
        // 3. Se não estiver no cache, busca na rede (Network Fallback)
        return fetch(event.request);
      })
  );
});

✅ Conclusão

Service Worker PWA: O Service Worker é a tecnologia transformadora que permite aos PWAs oferecerem experiências de nível nativo. Seu comportamento é definido pelo seu ciclo de vida e pelos eventos que ele gerencia. Ao registrar o SW no frontend e implementar a lógica correta nos eventos install (para pré-cache), activate (para limpeza) e fetch (para estratégias de cache), você constrói a fundação para um aplicativo web rápido, confiável e totalmente funcional, mesmo offline.

Toda jornada tem um início, e o início para se tornar um desenvolvedor web é dominar as seguintes tecnologias, que você encontra aqui mesmo:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime

Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.