Armazenamento persistente

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

Se enfrentarem pressão de armazenamento, como pouco espaço em disco, os navegadores geralmente descartam dados, inclusive da Cache API e do IndexedDB, da origem menos usada recentemente. Isso pode causar perda de dados se o app não sincronizou dados com o servidor e reduz a confiabilidade do aplicativo, removendo recursos necessários para o app funcionar, o que leva a experiências do usuário negativas.

Felizmente, uma pesquisa da equipe do Chrome mostra que os dados raramente são limpos automaticamente pelo Chrome. É muito mais comum que os usuários façam manualmente limpar o armazenamento. Assim, se um usuário visita seu site regularmente, as chances são pequenos para que os dados sejam removidos. Para impedir que o navegador exclua seus dados, solicite que todo o armazenamento do site seja marcado persistente.

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

Compatibilidade com navegadores

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

Origem

Para saber mais sobre remoções, quanto é possível armazenar e como lidar com a 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 persistentes. Chamar navigator.storage.persisted() retorna uma promessa que é resolvido com um booleano, indicando se o armazenamento foi marcado como persistiu.

// 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ê salvar dados críticos do usuário, e o ideal é que a solicitação seja encapsulada gesto. Não peça armazenamento persistente no carregamento da página ou em outro bootstrap o navegador pode solicitar a permissão do usuário. Se o usuário não está fazendo nada que ache que precisa ser salvo, o comando pode ser confusas, e é provável que a solicitação seja rejeitada. Além disso, não solicite com muita frequência. Se o usuário tiver decidido não conceder permissão, não dê novamente 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 uma 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 vários fatores para decidir se as permissões de armazenamento permanente serão concedidas.

Chrome e outros navegadores baseados no Chromium

O Chrome e a maioria dos outros navegadores baseados no Chromium lidam automaticamente com solicitação de permissão e não mostra nenhuma solicitação ao usuário. Em vez disso, se um site for considerado importante, a permissão de armazenamento permanente será concedido automaticamente, caso contrário, ele será negado 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á são avaliadas usando a mesma heurística.

Firefox

O Firefox delega a solicitação de permissão ao usuário. Quando o armazenamento permanente for solicitado, ele solicita ao usuário um pop-up na interface perguntando se ele permitirá site para armazenar 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 tipo de armazenamento é protegido pelo armazenamento permanente?

Se a permissão de armazenamento permanente for concedida, o navegador não será removido 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 forma programática de informar ao navegador que você não precisam de armazenamento permanente.

Conclusão

Uma pesquisa da equipe do Chrome mostra que, embora possível, os dados armazenados são raramente apagados automaticamente pelo Google Chrome. Para proteger dados críticos que podem não sejam armazenados na nuvem ou vão resultar em perdas significativas de dados, o armazenamento permanente pode ser uma ferramenta útil para garantir que seus dados não sejam removido pelo navegador quando o dispositivo local está com pressão de armazenamento. Lembre-se de solicitar armazenamento permanente apenas quando o usuário estiver mais propenso a o que você quer.

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 pela primeira vez no WebFundamentals.

Imagem principal de Umberto no Unsplash