Cache PWA

PWA
Tempo de leitura: 4 minutos

Cache PWA: O armazenamento em cache é o que transforma um website comum em um Progressive Web App (PWA) confiável. Em vez de depender exclusivamente da rede, o PWA salva cópias de seus recursos (assets) diretamente no dispositivo do usuário.

Essa capacidade é fundamental para alcançar o princípio de Confiabilidade (Reliable), garantindo que o aplicativo carregue e funcione instantaneamente, mesmo com a conexão ausente ou instável (o chamado offline-first).

1. 📦 Fundamentos da Cache API

A API utilizada pelo Service Worker para gerenciar recursos chama-se Cache API. Ela é um armazenamento chave-valor onde a chave é o objeto Request (ou URL) e o valor é o objeto Response.

A. Quando o Cache Ocorre

Existem dois momentos principais para armazenar recursos em cache:

  1. Pré-caching (Evento install): Armazenar ativos estáticos críticos imediatamente após a instalação do Service Worker. Essencial para o “App Shell” (offline shell).
  2. Runtime Caching (Evento fetch): Armazenar ativos sob demanda, conforme o usuário os solicita pela primeira vez. Ideal para imagens dinâmicas ou páginas que não são críticas no início.

B. Download e Armazenamento

O Service Worker gerencia a Cache API através de métodos expostos no objeto global caches:

MétodoPropósito
caches.open(cacheName)Abre (ou cria) um cache com um nome específico (ex: 'v1-assets').
cache.addAll(urls)Faz o download de uma lista de URLs e armazena as respostas no cache aberto.
cache.match(request)Procura uma Request específica dentro do cache.
cache.delete(request)Remove um recurso específico do cache.

2. 👷 Implementando o Pré-caching no Service Worker

O pré-caching é a técnica que garante que os recursos básicos (o “esqueleto” do aplicativo) estejam disponíveis desde o primeiro uso offline.

JavaScript

// service-worker.js

const CACHE_STATIC_NAME = 'static-v1'; 
const OFFLINE_URLS = [
  '/',
  '/index.html',
  '/styles.css',
  '/script.js'
];

self.addEventListener('install', (event) => {
  // event.waitUntil garante que o SW não ative até que o cache esteja preenchido
  event.waitUntil(
    caches.open(CACHE_STATIC_NAME)
      .then((cache) => {
        console.log('Cache preenchido com App Shell.');
        // Faz o download e armazena todos os recursos da lista
        return cache.addAll(OFFLINE_URLS); 
      })
  );
});

3. 🔄 Atualizando e Removendo o Cache

O cache não deve ser estático. A maneira mais segura de garantir que os usuários obtenham a versão mais recente dos recursos é por meio do Controle de Versão do Cache.

A. Atualização do Cache (Evento activate)

A melhor prática para atualização é criar um novo cache com um novo nome (v2, v3, etc.) no evento install, e usar o evento activate para deletar os caches antigos.

JavaScript

// service-worker.js

const CACHE_STATIC_NAME = 'static-v2'; // NOME FOI ALTERADO para forçar atualização

self.addEventListener('activate', (event) => {
  event.waitUntil(
    caches.keys().then(cacheNames => {
      return Promise.all(
        cacheNames.map(cacheName => {
          // Se o nome do cache NÃO for o nome atual (v2), ele é antigo e deve ser deletado
          if (cacheName !== CACHE_STATIC_NAME) {
            console.log('Deletando cache antigo:', cacheName);
            return caches.delete(cacheName);
          }
        })
      );
    })
  );
});

B. Remoção de Recursos Específicos

Se você precisar remover um único recurso (ex: após a refatoração), use o método cache.delete(request) no momento apropriado (geralmente durante o activate ou o fetch para limpeza).

4. 🛠️ Depuração e Inspeção do Cache

A depuração é feita diretamente nas ferramentas do navegador:

  • Chrome/Edge DevTools: Vá para a aba Application (Aplicativo). Na seção Storage (Armazenamento), você encontrará Cache Storage e Service Workers.
    • Você pode inspecionar o conteúdo de cada cache e simular o funcionamento offline.
  • Lighthouse: A ferramenta de auditoria automática do Google verifica se o PWA está registrando e ativando um Service Worker e se ele está gerenciando os eventos start_url para o modo offline.

✅ Conclusão

O cache é o motor que impulsiona a confiabilidade e a velocidade de um PWA. Ao utilizar o Service Worker para gerenciar a Cache API, você pode definir exatamente quais recursos são pré-armazenados (install para o App Shell) e como o controle de versão (activate para limpeza) garante que o usuário sempre tenha acesso à versão mais recente e a uma experiência offline robusta. Dominar as estratégias de cache é o passo final para entregar a experiência de aplicativo nativo que os PWAs prometem.

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.