Armazenamento persistente

O armazenamento permanente pode ajudar a proteger dados críticos contra a remoção e reduzir a chance de perda de dados.

Quando precisam lidar com a pressão de armazenamento, como pouco espaço em disco, os navegadores geralmente deixam dados, inclusive da API Cache e do IndexedDB, da origem menos usada recentemente. Isso pode causar perda de dados se o app não tiver sincronizado dados com o servidor e reduzir a confiabilidade do app removendo recursos necessários para que ele funcione, o que causa experiências negativas para o usuário.

Felizmente, uma pesquisa da equipe do Chrome mostra que muito raramente os dados são apagados automaticamente pelo Chrome. É muito mais comum que os usuários limpem o armazenamento manualmente. Assim, se um usuário visita seu site regularmente, as chances são pequenas de que seus dados sejam removidos. Para impedir que o navegador exclua seus dados, solicite que todo o armazenamento do site seja marcado como permanente.

O armazenamento permanente é compatível com muitos 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

É possível 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 persistente.

// 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 seu armazenamento seja marcado como persistente é quando você salva dados críticos do usuário. O ideal é que a solicitação seja agrupada com um gesto do usuário. Não peça armazenamento persistente no carregamento da página ou em outro código de inicialização, o navegador pode solicitar a permissão do usuário. Se o usuário não estiver fazendo nada que ele acha que precisa ser salvo, o comando pode ser confuso e ele provavelmente rejeitará a solicitação. Além disso, não faça 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 seu 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 diferentes fatores para decidir se querem 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 solicitações 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.

As heurísticas para determinar se um site é importante incluem:

  • 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 exibe um pop-up de interface ao usuário perguntando se permite que o site armazene dados nesse 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 tipo de armazenamento é protegido pelo armazenamento permanente?

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

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

Como desativar o armazenamento permanente

No momento, não há uma maneira programática de informar ao navegador que você não precisa mais de 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 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 tiver que lidar com pressão de armazenamento. Lembre-se de solicitar o armazenamento permanente apenas quando o usuário estiver mais propenso a querer.

Obrigado.

Um agradecimento especial a Victor Costan e Joe Medley por revisar este artigo. Agradecemos a Chris Wilson, que escreveu a versão original deste artigo que apareceu no WebFundamentals.

Imagem principal de Umberto no Unsplash