Stockage persistant

Le stockage persistant peut aider à protéger les données critiques contre les évictions et à réduire les risques de perte de données.

Lorsqu'ils sont confrontés à une pression de stockage telle qu'un faible espace disque, les navigateurs évincent généralement les données, y compris de l'API Cache et de la base de données IndexedDB, de l'origine la moins récemment utilisée. Cela peut entraîner une perte de données si l'application n'a pas synchronisé les données avec le serveur. Cela peut aussi réduire sa fiabilité en supprimant les ressources nécessaires au fonctionnement de l'application, ce qui entraîne des expériences utilisateur négatives.

Heureusement, les recherches de l'équipe Chrome montrent que les données sont très rarement effacées automatiquement par Chrome. Il est beaucoup plus fréquent d'effacer manuellement l'espace de stockage. Par conséquent, si un utilisateur visite régulièrement votre site, les chances que vos données soient évincées sont faibles. Pour empêcher le navigateur de supprimer vos données, vous pouvez demander que l'ensemble du stockage de votre site soit marqué comme persistant.

Le stockage persistant est compatible avec de nombreux navigateurs récents.

Navigateurs pris en charge

  • 55
  • 79
  • 57
  • 15.2

Source

Pour en savoir plus sur l'éviction, la quantité de stockage que vous pouvez stocker et sur la gestion des limites de quota, consultez Stockage pour le Web.

Vérifier si le stockage de votre site a été marqué comme persistant

Vous pouvez utiliser JavaScript pour déterminer si l'espace de stockage de votre site a été marqué comme persistant. L'appel de navigator.storage.persisted() renvoie une promesse qui se résout avec une valeur booléenne, indiquant si le stockage a été marqué comme persistant.

// 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}`);
}

Quand dois-je demander un stockage persistant ?

Le meilleur moment pour demander que votre espace de stockage soit marqué comme persistant est lorsque vous enregistrez des données utilisateur critiques. Dans l'idéal, la requête doit être encapsulée par un geste de l'utilisateur. Ne demandez pas de stockage persistant au chargement de la page ou dans un autre code d'amorçage, car le navigateur peut demander l'autorisation à l'utilisateur. Si l'utilisateur n'effectue aucune opération qui, selon lui, doit être enregistrée, l'invite peut prêter à confusion et la refuser. En outre, ne demandez pas trop souvent. Si l'utilisateur a décidé de ne pas accorder son autorisation, ne demandez pas immédiatement l'autorisation au prochain enregistrement.

Demander un stockage persistant

Pour demander un stockage persistant des données de votre site, appelez navigator.storage.persist(). Elle renvoie une promesse qui se résout avec une valeur booléenne indiquant si l'autorisation de stockage persistant a été accordée.

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

Comment l'autorisation est-elle accordée ?

Le stockage persistant est considéré comme une autorisation. Les navigateurs utilisent différents facteurs pour décider d'accorder ou non des autorisations de stockage persistant.

Chrome et autres navigateurs basés sur Chromium

Chrome, ainsi que la plupart des autres navigateurs basés sur Chromium, gèrent automatiquement la demande d'autorisation et n'affichent aucune invite à l'utilisateur. À la place, si un site est considéré comme important, l'autorisation de stockage persistant est automatiquement accordée. Sinon, elle est refusée en mode silencieux.

Les méthodes heuristiques permettant de déterminer si un site est important sont les suivantes:

  • Quel est le niveau d'engagement du site ?
  • Le site a-t-il été installé ou ajouté à vos favoris ?
  • Le site a-t-il été autorisé à afficher des notifications ?

Si la requête a été refusée, elle peut être réexaminée plus tard et sera évaluée à l'aide de la même heuristique.

Firefox

Firefox délègue la demande d'autorisation à l'utilisateur. Lorsque le stockage persistant est demandé, une fenêtre pop-up d'interface utilisateur s'affiche pour demander à l'utilisateur s'il autorise le site à y stocker des données.

Pop-up affiché par Firefox lorsqu'un site demande un stockage persistant.
Pop-up qui s'affiche par Firefox lorsqu'un site demande un stockage persistant.

Quel espace de stockage est protégé par le stockage persistant ?

Si l'autorisation de stockage persistant est accordée, le navigateur n'évince pas les données stockées dans:

  • API Cache
  • Cookies
  • Stockage DOM (stockage local)
  • API File System (système de fichiers en bac à sable fourni par le navigateur)
  • IndexedDB
  • Service workers
  • App Cache (obsolète, ne doit pas être utilisé)
  • WebSQL (obsolète, ne doit pas être utilisé)

Désactiver le stockage persistant

Pour le moment, il n'existe aucun moyen programmatique d'indiquer au navigateur que vous n'avez plus besoin d'un espace de stockage persistant.

Conclusion

Les études menées par l'équipe Chrome montrent que, bien que cela soit possible, les données stockées sont rarement effacées automatiquement par Chrome. Pour protéger les données critiques qui peuvent ne pas être stockées dans le cloud ou entraîner une perte importante de données, le stockage persistant peut être un outil utile pour éviter que vos données ne soient supprimées par le navigateur lorsque l'appareil local est soumis à une pression de stockage. N'oubliez pas de ne demander un stockage persistant que lorsque l'utilisateur est le plus susceptible de le vouloir.

Merci

Nous remercions tout particulièrement Victor Costan et Joe Medley pour la lecture de cet article. Merci à Chris Wilson, qui a rédigé la version originale de cet article publié pour la première fois sur WebFundamentals.

Image héros par Umberto sur Unsplash