Pamięć trwała

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

W obliczu dużej ilości miejsca na dane, np. małej ilości miejsca na dysku, przeglądarki zwykle usuwają dane, w tym z interfejsów Cache API i IndexedDB, z najrzadziej używanego źródła. 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 przeprowadzone przez zespół Chrome pokazują, że Chrome bardzo rzadko automatycznie usuwa dane. Użytkownicy znacznie częściej ręcznie usuwają dane. Jeśli więc użytkownik regularnie odwiedza Twoją witrynę, istnieje niewielkie prawdopodobieństwo, że Twoje dane zostaną z niej wykluczone. 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 pamięć trwałą?

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ć zaszyfrowane w gestach 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 niczego, co według niego wymaga zapisania, prompt może być mylący i użytkownik 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 są przyznawane 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 strona 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 żądanie zostało odrzucone, można poprosić o nie później i zostanie zweryfikowane z użyciem tej samej heurystyki.

Firefox

Firefox deleguje prośbę o przyznanie uprawnień do użytkownika. Gdy użytkownik żąda trwałego miejsca na dane, wyświetla się mu wyskakujące okienko z pytaniem, czy zezwala na przechowywanie danych w trwałym miejscu na dane.

Wyskakujące okienko wyświetlane w przeglądarce Firefox, gdy witryna żąda trwałej pamięci masowej.
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 piaskownicy)
  • 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 można w sposób zautomatyzowany poinformować przeglądarki, że nie jest już potrzebna pamięć trwała.

Podsumowanie

Badania przeprowadzone przez zespół Chrome pokazują, że chociaż jest to możliwe, przechowywane dane rzadko są automatycznie czyszczone 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 problemy z miejscem na dane. Pamiętaj, że można żądać pamięci trwałej tylko wtedy, gdy jest najbardziej prawdopodobne, że użytkownik będzie tego chciała.

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