Pamięć trwała

Pamięć trwała może pomóc w ochronie ważnych danych przed wyrzuceniem i zmniejszyć ryzyko ich utraty.

Gdy brakuje miejsca na dysku, przeglądarki zazwyczaj wyrzucają dane, w tym z Cache API i IndexedDB, z najrzadziej niedawno używanych źródeł. Może to spowodować utratę danych, jeśli aplikacja nie zsynchronizuje danych z serwerem, oraz obniżyć niezawodność aplikacji przez usunięcie zasobów wymaganych do jej działania. Oba te czynniki mogą negatywnie wpłynąć na wrażenia użytkowników.

Na szczęście badania zespołu Chrome wskazują, że dane są bardzo rzadko automatycznie usuwane przez Chrome. Użytkownicy znacznie częściej ręcznie usuwają dane. Jeśli użytkownik regularnie odwiedza Twoją witrynę, jest mało prawdopodobne, że dane zostaną usunięte. Aby uniemożliwić przeglądarce usuwanie danych, możesz poprosić o oznaczenie całego miejsca na dane witryny jako stałego.

Pamięć trwała jest obsługiwana w wielu nowoczesnych przeglądarkach.

Obsługa przeglądarek

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

Źródło

Więcej informacji o wyrzucaniu, ilości danych, jaką możesz przechowywać, oraz o ograniczeniach limitu miejsca na dane znajdziesz w artykule Miejsce na dane w internecie.

Sprawdź, czy pamięć podręczna witryny została oznaczona jako trwała

Za pomocą JavaScriptu możesz sprawdzić, czy pamięć Twojej witryny została oznaczona jako trwała. Wywołanie navigator.storage.persisted() zwraca obietnicę, która zwraca wartość logiczną wskazującą, czy miejsce na dane zostało oznaczone jako utrwalone.

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

Kiedy należy poprosić o trwałe miejsce na dane?

Najlepszym momentem na żądanie o oznaczenie pamięci jako trwałej jest moment zapisywania przez użytkownika ważnych danych. W idealnej sytuacji żądanie powinno być opakowane w gesturze użytkownika. Nie proś o trwałe przechowywanie danych podczas wczytywania strony ani w innym kodzie startowym. Przeglądarka może poprosić użytkownika o pozwolenie. Jeśli użytkownik nie robi nic, co jego zdaniem wymaga zapisania, prompt może być dla niego mylący i prawdopodobnie odrzuci prośbę. Nie wysyłaj ich też zbyt często. Jeśli użytkownik zdecyduje się nie udzielić uprawnień, nie wyświetlaj ponownie prośby o pozwolenie przy następnym zapisywaniu.

Żądanie pamięci trwałej

Aby poprosić o trwałe miejsce na dane witryny, zadzwoń pod numer navigator.storage.persist(). Zwraca obietnicę, która zwraca wartość logiczną wskazującą, czy uprawnienia do trwałego przechowywania zostały przyznane.

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

Jak przyznać uprawnienia?

Pamięć trwała jest traktowana jako uprawnienie. Przeglądarki używają różnych czynników do podejmowania decyzji o przyznaniu trwałych uprawnień do przechowywania danych.

Chrome i inne przeglądarki oparte na Chromium

Chrome i większośc innych przeglądarek opartych na Chromium automatycznie obsługują prośbę o uprawnienia i nie wyświetlają żadnych monitów użytkownikowi. Jeśli jednak witryna jest ważna, trwałe uprawnienia do przechowywania są przyznawane automatycznie, a w przeciwnym razie są po cichu odrzucane.

Heurystyka służąca do określania, czy dana witryna jest ważna, obejmuje:

  • Jak wysoki jest poziom zaangażowania w witrynę?
  • Czy witryna została zainstalowana lub dodana do zakładek?
  • Czy witryna ma uprawnienia do wyświetlania powiadomień?

Jeśli prośba została odrzucona, możesz ją przesłać ponownie później. Zostanie ona oceniona za pomocą tej samej heurystyki.

Firefox

Firefox deleguje prośbę o przyznanie uprawnień do użytkownika. Gdy zostanie poproszony o trwałe miejsce na dane, wyświetla użytkownikowi wyskakujące okienko z pytaniem, czy zezwoli witrynie na przechowywanie danych w trwałym miejscu na dane.

Okienko wyskakujące wyświetlane przez Firefoxa, gdy witryna poprosi o trwałe miejsce na dane.
Popup wyświetlany przez Firefoxa, gdy witryna prosi o trwałe przechowywanie.

Jakie miejsce na dane jest chronione przez pamięć trwałą?

Jeśli przyznane zostaną uprawnienia do trwałego przechowywania, przeglądarka nie usunie danych przechowywanych w tych miejscach:

  • Cache API
  • Pliki cookie
  • Pamięć DOM (pamięć lokalna)
  • interfejs File System API (system plików udostępniany przez przeglądarkę i oddzielony od reszty systemu operacyjnego),
  • IndexedDB
  • Skrypty service worker
  • Pamięć podręczna aplikacji (wycofana, nie należy jej używać)
  • WebSQL (wycofany, nie należy go używać)

Jak wyłączyć pamięć trwałą

Obecnie nie ma możliwości programowego poinformowania przeglądarki, że nie potrzebujesz już trwałego miejsca na dane.

Podsumowanie

Z badań zespołu Chrome wynika, że chociaż jest to możliwe, przechowywane dane są rzadko automatycznie usuwane przez Chrome. Aby chronić ważne dane, które nie mogą być przechowywane w chmurze lub których utrata spowoduje utratę znacznej ilości danych, możesz skorzystać z trwałego miejsca na dane. Pomoże Ci ono zadbać o to, aby przeglądarka nie usuwała danych, gdy urządzenie lokalne ma mało miejsca na dane. Pamiętaj, aby żądać trwałego miejsca na dane tylko wtedy, gdy użytkownik najprawdopodobniej tego potrzebuje.

Dziękujemy

Szczególne podziękowania dla Victora Costana i Joe Medleya za sprawdzenie tego artykułu. Dziękujemy Chrisowi Wilsonowi, który napisał pierwotną wersję tego artykułu, która po raz pierwszy pojawiła się na stronie WebFundamentals.

Obraz główny: Umberto na Unsplash