Armazenamento persistente

O armazenamento permanente ajuda a proteger dados críticos contra remoção e reduz a chance de perda de dados.

Diante da pressão de armazenamento, como pouco espaço em disco, os navegadores normalmente vão remover dados, inclusive da API Cache e IndexedDB, da origem menos usada recentemente. Isso poderá causar perda de dados se o app não tiver sincronizado dados com o servidor e reduzir a confiabilidade removendo os recursos necessários para o funcionamento do app, o que leva a experiências do usuário negativas.

Felizmente, as pesquisas da equipe do Chrome mostram que os dados raramente são limpos automaticamente pelo navegador. É muito mais comum limpar o armazenamento manualmente. Assim, se um usuário acessar o site regularmente, há poucas chances de os dados serem removidos. Para evitar que o navegador exclua seus dados, você pode solicitar que o armazenamento de todo o site seja marcado como persistente.

O armazenamento permanente é compatível com vários navegadores modernos.

Compatibilidade com navegadores

  • 55
  • 79
  • 57
  • 15.2

Origem

Para saber mais sobre remoção, quanto é possível armazenar e como lidar com limitações de cota, consulte Armazenamento para a Web.

Verificar se o armazenamento do site foi marcado como persistente

Você pode usar o JavaScript para determinar se o armazenamento do site foi marcado como persistente. Chamar navigator.storage.persisted() retorna uma promessa que é resolvida com um booleano, indicando se o armazenamento foi marcado como persistido.

// Check if site's storage has been marked as persistent
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persisted();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

Quando devo solicitar armazenamento permanente?

O melhor momento para solicitar que o armazenamento seja marcado como persistente é quando você salva dados críticos do usuário, e o ideal é que a solicitação seja envolvida em um gesto do usuário. Não solicite armazenamento persistente no carregamento da página ou em outro código de inicialização. O navegador pode pedir permissão do usuário. Se o usuário não estiver fazendo algo que ache que precisa ser salvo, a solicitação poderá ser confusa e ele provavelmente vai rejeitar a solicitação. Além disso, não envie solicitações com muita frequência. Se o usuário tiver decidido não conceder permissão, não solicite novamente imediatamente no próximo salvamento.

Solicitar armazenamento permanente

Para solicitar armazenamento permanente para os dados do site, chame navigator.storage.persist(). Ela retorna uma promessa que é resolvida com um booleano, indicando se a permissão de armazenamento permanente foi concedida.

// Request persistent storage for site
if (navigator.storage && navigator.storage.persist) {
  const isPersisted = await navigator.storage.persist();
  console.log(`Persisted storage granted: ${isPersisted}`);
}

Como a permissão é concedida?

O armazenamento permanente é tratado como uma permissão. Os navegadores usam fatores diferentes para decidir se precisam conceder permissões de armazenamento permanente.

Chrome e outros navegadores baseados no Chromium

O Chrome e a maioria dos outros navegadores baseados no Chromium processam automaticamente a solicitação de permissão e não mostram nenhuma solicitação ao usuário. Em vez disso, se um site for considerado importante, a permissão de armazenamento permanente será concedida automaticamente. Caso contrário, ela será negada silenciosamente.

A heurística para determinar se um site é importante inclui:

  • Qual é o nível de engajamento do site?
  • O site foi instalado ou adicionado aos favoritos?
  • O site recebeu permissão para mostrar notificações?

Se a solicitação foi negada, ela pode ser solicitada novamente mais tarde e será avaliada com a mesma heurística.

Firefox

O Firefox delega a solicitação de permissão ao usuário. Quando o armazenamento permanente é solicitado, ele avisa o usuário com um pop-up de interface perguntando se ele permite que o site armazene dados nesse tipo de armazenamento.

Um pop-up mostrado pelo Firefox quando um site solicita armazenamento permanente.
Um pop-up mostrado pelo Firefox quando um site solicita armazenamento permanente.

Qual armazenamento é protegido pelo armazenamento permanente?

Se a permissão de armazenamento permanente for concedida, o navegador não removerá os dados armazenados em:

  • API Cache
  • Cookies
  • Armazenamento DOM (local)
  • API File System (sistema de arquivos em sandbox e fornecido pelo navegador)
  • IndexedDB
  • Service workers
  • Cache do app (descontinuado, não deve ser usado)
  • WebSQL (descontinuado, não deve ser usado)

Como desativar o armazenamento permanente

No momento, não há uma maneira programática de dizer ao navegador que você não precisa mais do armazenamento permanente.

Conclusão

Pesquisas da equipe do Chrome mostram que, embora possível, os dados armazenados raramente são apagados automaticamente pelo Chrome. Para proteger dados críticos que podem não ser armazenados na nuvem ou resultarão em perda significativa de dados, o armazenamento permanente pode ser uma ferramenta útil para garantir que seus dados não sejam removidos pelo navegador quando o dispositivo local enfrentar pressão de armazenamento. Lembre-se de solicitar armazenamento permanente apenas quando o usuário estiver mais propenso a fazer isso.

Até logo!

Agradecimentos especiais a Victor Costan e Joe Medley pela revisão deste artigo. Agradecemos a Chris Wilson, que escreveu a versão original deste artigo, que apareceu pela primeira vez no WebFundamentals.

Imagem principal de Umberto no Unsplash