Pamięć trwała

Pamięć trwała może chronić najważniejsze dane przed trwałym usunięciem i zmniejszyć ryzyko ich utraty.

W razie konieczności związanej z ograniczeniem ilości miejsca na dane, takim jak brak miejsca na dysku, przeglądarki zazwyczaj usuwają dane, w tym z interfejsu Cache API i IndexedDB, z najrzadziej używanego źródła. Może to spowodować utratę danych, jeśli aplikacja nie zsynchronizowała danych z serwerem, oraz zmniejszenie jej niezawodności przez usunięcie zasobów potrzebnych do działania aplikacji. W obu przypadkach może to negatywnie wpływać na wygodę użytkowników.

Na szczęście badania przeprowadzone przez zespół Chrome wykazały, że dane są bardzo rzadko usuwane automatycznie przez Chrome. Użytkownicy znacznie częściej ręcznie czyszczą pamięć masową. Jeśli więc użytkownik regularnie odwiedza Twoją witrynę, ryzyko usunięcia danych jest niewielkie. Aby zapobiec usunięciu danych przez przeglądarkę, możesz poprosić o oznaczenie całej pamięci witryny jako trwałej.

Pamięć trwała jest obsługiwana przez wiele nowoczesnych przeglądarek.

Obsługa przeglądarek

  • 55
  • 79
  • 57
  • 15.2

Źródło

Więcej informacji o usuwaniu danych, ilości danych, które możesz przechowywać i radzić sobie z ograniczeniami limitów, znajdziesz w artykule Miejsce na dane w internecie.

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

Aby sprawdzić, czy pamięć witryny została oznaczona jako trwała, możesz użyć JavaScriptu. Wywołanie navigator.storage.persisted() zwraca obietnicę, która zawiera wartość logiczną wskazującą, czy pamięć masowa została oznaczona jako trwała.

// 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 mam poprosić o pamięć trwałą?

Najlepszy moment, aby poprosić o oznaczenie miejsca na dane jako trwały, to zapisanie krytycznych danych użytkowników, a żądanie należy ująć w gesty użytkownika. Nie pytaj o pamięć trwałą podczas wczytywania strony ani w innym kodzie wczytywania. Przeglądarka może poprosić użytkownika o zgodę. Jeśli użytkownik nie zrobi nic, co jego zdaniem wymaga zapisania, prompt może być mylący i prawdopodobnie odrzuci prośbę. Poza tym nie pytajcie zbyt często. Jeśli użytkownik zdecydował się nie przyznawać uprawnień, nie proś od razu ponownie przy następnym zapisie.

Żądanie pamięci trwałej

Aby poprosić o pamięć trwałą na dane witryny, wywołaj navigator.storage.persist(). Zwraca ona obietnicę, która jest wartością logiczną, która wskazuje, czy przyznano uprawnienia do pamięci trwałej.

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

Jak jest przyznawane uprawnienia?

Pamięć trwała jest traktowana jako uprawnienie. Przeglądarki decydują o tym, czy przyznać uprawnienia do pamięci trwałej, na podstawie różnych czynników.

Chrome i inne przeglądarki oparte na Chromium

Chrome i większość innych przeglądarek opartych na Chromium automatycznie obsługują żądania uprawnień i nie wyświetlają użytkownikowi żadnych próśb. Jeśli witryna zostanie uznana za ważną, uprawnienie do pamięci trwałej zostanie przyznane automatycznie. W przeciwnym razie zostanie im odrzucone.

Metody heurystyczne służące do określania, czy witryna jest ważna, obejmują:

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

Jeśli prośba zostanie odrzucona, można poprosić o nią później. Zostanie ona też sprawdzona przy użyciu tej samej metody heurystycznej.

Firefox

Firefox przekazuje prośbę o przyznanie uprawnień użytkownikowi. Gdy użytkownik poprosi o pamięć trwałą, w interfejsie pojawi się wyskakujące okienko z pytaniem, czy zezwala witrynie na przechowywanie danych w pamięci trwałej.

Wyskakujące okienko wyświetlane w przeglądarce Firefox, gdy strona prosi o stałą pamięć masową.
Wyskakujące okienko wyświetlane przez przeglądarkę Firefox, gdy witryna prosi o pamięć trwałą.

Jaka pamięć masowa jest chroniona przez pamięć trwałą?

Jeśli zostanie przyznane uprawnienie do pamięci trwałej, przeglądarka nie usunie danych przechowywanych w tych miejscach:

  • Interfejs API pamięci podręcznej
  • Ciastka
  • Pamięć DOM (pamięć lokalna)
  • File System API (system plików udostępniany przez przeglądarkę i w piaskownicy)
  • IndexedDB
  • Skrypty service worker
  • Pamięć podręczna aplikacji (wycofana, nie należy jej używać)
  • WebSQL (wycofany, nie powinien być używany)

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

Obecnie nie ma sposobu na automatyczne poinformowanie przeglądarki, że nie potrzebujesz już stałej pamięci masowej.

Podsumowanie

Badania przeprowadzone przez zespół Chrome wskazują, że choć jest to możliwe, przechowywane dane rzadko są automatycznie czyszczone przez Chrome. W celu ochrony najważniejszych danych, które mogą nie być przechowywane w chmurze lub które spowodują znaczącą utratę danych, pamięć trwała może być pomocnym narzędziem, które pilnuje, aby przeglądarka nie usuwała Twoich danych, gdy na urządzeniu lokalnym nie ma zbyt wielu pamięci. Pamiętaj też, aby korzystać z pamięci trwałej tylko wtedy, gdy jest najbardziej prawdopodobne, że użytkownik będzie tego potrzebować.

Dziękujemy

Specjalne podziękowania dla Victora Costana i Joego Medleya za przeczytanie tego artykułu. Dzięki Chrisowi Wilsonowi, który napisał oryginalną wersję tego artykułu, który ukazał się po raz pierwszy w witrynie WebFundamentals.

Baner powitalny od Umberto w filmie Unsplash