Armazenamento persistente

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

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

Felizmente, a pesquisa da equipe do Chrome mostra que os dados raramente são limpos automaticamente pelo Chrome. É muito mais comum que os usuários limpem o armazenamento manualmente. Portanto, se um usuário visitar seu site regularmente, as chances de seus dados serem removidos serão pequenas. Para impedir que o navegador exclua seus dados, você pode solicitar que o armazenamento de todo o site seja marcado como permanente.

O armazenamento permanente é compatível com muitos navegadores modernos.

Browser Support

  • Chrome: 55.
  • Edge: 79.
  • Firefox: 57.
  • Safari: 15.2.

Source

Para saber mais sobre a remoção, quanto você pode armazenar e como lidar com as limitações de cota , consulte Armazenamento para a Web.

Verificar se o armazenamento do site foi marcado como permanente

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

// 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 pedir armazenamento permanente?

O melhor momento para solicitar que seu armazenamento seja marcado como permanente é quando você salva dados críticos do usuário, e a solicitação deve ser encapsulada em um gesto do usuário. Não peça armazenamento permanente no carregamento de página ou em outro código de inicialização. O navegador pode solicitar permissão ao usuário. Se o usuário não estiver fazendo nada que precise ser salvo, o prompt poderá ser confuso, e ele provavelmente vai rejeitar a solicitação. Além disso, não solicite com muita frequência. Se o usuário decidir não conceder permissão, não solicite imediatamente de novo no próximo salvamento.

Solicitar armazenamento permanente

Para solicitar armazenamento permanente para os dados do seu site, chame navigator.storage.persist(). Ele 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 concedem 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 nenhum aviso 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 for negada, ela poderá ser feita novamente mais tarde e será avaliada usando a mesma heurística.

Firefox

O Firefox delega a solicitação de permissão ao usuário. Quando o armazenamento permanente é solicitado, ele mostra um pop-up da interface do usuário perguntando se o usuário vai permitir que o site armazene dados no armazenamento permanente.

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 vai remover os dados armazenados em:

  • API Cache
  • Cookies
  • Armazenamento DOM (armazenamento local)
  • API File System (sistema de arquivos fornecido pelo navegador e em sandbox)
  • IndexedDB
  • Service workers
  • Cache de aplicativo (descontinuado, não use)
  • WebSQL (descontinuado, não use)

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

A pesquisa da equipe do Chrome mostra que, embora seja possível, os dados armazenados raramente são limpos automaticamente pelo Chrome. Para proteger dados críticos que podem não ser armazenados na nuvem ou que resultam 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 estiver com pressão de armazenamento. E lembre-se de solicitar armazenamento permanente apenas quando o usuário tiver mais chances de querer.

Obrigado

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