Dados Off-line em PWA

PWA
Tempo de leitura: 3 minutos

Dados Off-line no PWA: Os Progressive Web Apps (PWAs) oferecem uma experiência de usuário rica e semelhante a aplicativos nativos, permitindo que os usuários interajam com seus aplicativos mesmo quando estão offline. Uma das tecnologias-chave para essa funcionalidade é o IndexedDB, um banco de dados embutido nos navegadores modernos, que permite armazenar grandes quantidades de dados estruturados de forma eficiente.

Neste artigo, exploraremos em detalhes como utilizar o IndexedDB para armazenar dados offline em PWAs, desde a criação de bancos de dados até a recuperação de informações.

Armazenamento Offline em PWAs

O armazenamento offline em PWAs é fundamental para garantir uma experiência fluida e consistente aos usuários, mesmo quando não há conexão com a internet. Ao armazenar dados localmente, é possível:

  • Permitir o funcionamento offline: O aplicativo pode continuar funcionando mesmo sem conexão com a rede, acessando os dados armazenados localmente.
  • Melhorar o desempenho: Ao evitar requisições à rede, o carregamento de dados é mais rápido.
  • Aumentar a experiência do usuário: Oferece uma experiência mais responsiva e consistente, mesmo em ambientes com baixa conectividade.

IndexedDB: O Banco de Dados Embutido

O IndexedDB é uma API do navegador que permite criar e gerenciar bancos de dados no lado do cliente. Ele oferece um modelo de dados flexível, similar a bancos de dados relacionais, com a capacidade de armazenar grandes quantidades de dados estruturados.

Características do IndexedDB:

  • Assíncrono: Todas as operações do IndexedDB são assíncronas, utilizando Promises.
  • Tipos de dados: Suporta diversos tipos de dados, incluindo strings, números, datas e objetos.
  • Indices: Permite criar índices para realizar consultas eficientes.
  • Transações: Garante a integridade dos dados através de transações.

Criando um Banco de Dados

Para criar um banco de dados no IndexedDB, utilizamos o método open() do objeto indexedDB.

JavaScript

const request = window.indexedDB.open('meu-banco-de-dados', 1);

request.onupgradeneeded = (event) => {
    const db = event.target.result;
    const objectStore = db.createObjectStore('meus-dados', { 
        keyPath: 'id'        
    });
};

Neste exemplo, criamos um banco de dados chamado “meu-banco-de-dados” e um objetoStore chamado “meus-dados” com um índice primário baseado no campo “id”.

Adicionando Dados

Para adicionar dados ao banco de dados, utilizamos o método add() ou put() de um objetoStore.

JavaScript

const transaction = db.transaction('meus-dados', 'readwrite');
const objectStore = transaction.objectStore('meus-dados');

const novoDado = { id: 1, nome: 'João', idade: 30 };
objectStore.add(novoDado);

Recuperando Dados

Para recuperar dados do banco de dados, utilizamos o método get() de um objetoStore.

JavaScript

const transaction = db.transaction('meus-dados');
const objectStore = transaction.objectStore('meus-dados');

const request = objectStore.get(1);

request.onsuccess = (event) => {
  const dado = event.target.result;
  console.log(dado);
};

Gerenciador de Armazenamento

Para facilitar a interação com o IndexedDB, é comum criar um gerenciador de armazenamento que encapsula as operações de criação, leitura, atualização e deleção de dados.

JavaScript

class IndexedDBManager {
  constructor(dbName, storeName) {
    // ...
  }

  async addData(data) {
    // ...
  }

  async getDataById(id) {
    // ...
  }

  // ... outros métodos
}

Persistência de Dados

O IndexedDB oferece uma forma robusta de armazenar dados localmente, mas é importante lembrar que os dados armazenados são específicos do navegador e do dispositivo. Ao implementar uma estratégia de persistência de dados, é possível sincronizar os dados entre dispositivos e garantir que as informações sejam mantidas mesmo após a exclusão do aplicativo.

Estratégias de persistência:

  • Sincronização em nuvem: Utilizar um serviço de nuvem para sincronizar os dados armazenados localmente.
  • Backup local: Criar backups dos dados em arquivos locais.
  • IndexedDB com suporte a múltiplos navegadores: Utilizar bibliotecas que abstraem as diferenças entre os navegadores para garantir a compatibilidade.

Conclusão

Dados Off-line em PWA: O IndexedDB é uma ferramenta poderosa para armazenar dados offline em PWAs, proporcionando uma experiência de usuário mais rica e responsiva. Ao dominar os conceitos básicos e as melhores práticas, você poderá criar aplicativos web que funcionam de forma eficiente, mesmo quando não há conexão com a internet.

Se você está buscando uma maneira de melhorar o desempenho e o engajamento do seu site, considere transformar seu site em um PWA. Com as ferramentas e frameworks disponíveis atualmente, criar um PWA é mais fácil do que nunca.

Para criar PWAs mais complexos e personalizados, é recomendado aprofundar seus conhecimentos em nossos artigos completos em HTMLCSSJavaScript e as tecnologias relacionadas a PWAs.

E para você validar seus códigos, para que o back-end do seu PWA funcione sem problemas, você precisará de uma plataforma de host completa. Clique aqui e conheça a Hostinger, a hospedagem com potência de verdade!!!

Author: Thiago Rossi