Pamięć trwała

Pamięć trwała może pomóc chronić najważniejsze dane przed usunięciem 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 zsynchronizowała danych z serwerem, oraz zmniejszenie niezawodności aplikacji przez usunięcie zasobów wymaganych do działania, co może negatywnie wpłynąć na wrażenia użytkownika.

Na szczęście badania przeprowadzone przez zespół Chrome pokazują, że Chrome bardzo rzadko automatycznie usuwa dane. Użytkownicy znacznie częściej usuwają pamięć masową. Jeśli więc użytkownik regularnie odwiedza Twoją witrynę, istnieje niewielkie prawdopodobieństwo, że Twoje dane zostaną trwale usunięte. 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 w wielu nowoczesnych przeglądarkach.

Obsługa przeglądarek

  • 55
  • 79
  • 57
  • 15.2

Źródło

Więcej informacji na temat usuwania danych, ilości przechowywanych danych i sposobów obsługi limitów limitów znajdziesz w artykule Miejsce na dane w internecie.

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

Aby sprawdzić, czy dane w Twojej witrynie zostały oznaczone jako trwałe, możesz użyć JavaScriptu. Wywołanie navigator.storage.persisted() zwraca obietnicę, która zostaje rozwiązana za pomocą wartości logicznej, która wskazuje, czy pamięć 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 należy poprosić o pamięć trwałą?

Najlepszym momentem na oznaczenie miejsca na dane jako trwałego jest zapisanie kluczowych danych użytkownika. Takie żądanie powinno być umieszczone gestem użytkownika. Nie wymagaj pamięci trwałej podczas wczytywania strony ani w innym kodzie wczytywania – przeglądarka może poprosić użytkownika o zgodę. Jeśli użytkownik nie robi niczego, co według niego należy zapisać, prośba może być myląca i prawdopodobnie ją odrzuci. Nie wyświetlaj też próśb za często. Jeśli użytkownik postanowił nie przyznawać uprawnień, nie proś ponownie o to przy następnym zapisie.

Żądanie pamięci trwałej

Aby zażądać trwałego przechowywania danych z witryny, wywołaj navigator.storage.persist(). Zwraca obietnicę realizowaną za pomocą wartości logicznej, która wskazuje, czy przyznano uprawnienia do trwałej pamięci masowej.

// 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 uprawnienia. Przeglądarki na podstawie różnych czynników decydują, czy przyznać uprawnienia do trwałej pamięci masowej.

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 potwierdzeń. Zamiast tego, jeśli witryna zostanie uznana za ważną, uprawnienie do trwałego przechowywania danych jest przyznawane automatycznie. W przeciwnym razie jest odrzucane dyskretnie.

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

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

Jeśli żądanie zostało odrzucone, można poprosić o nie później i zostanie sprawdzone z użyciem tej samej heurystyki.

Firefox

Firefox przekazuje użytkownikowi prośbę o przyznanie uprawnień. W odpowiedzi na żądanie pamięci trwałej użytkownik zobaczy 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 witryna żąda trwałego przechowywania danych.
Wyskakujące okienko wyświetlane w przeglądarce Firefox, gdy witryna żąda trwałej pamięci masowej.

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

Jeśli przyznasz uprawnienia do pamięci trwałej, przeglądarka nie usunie danych przechowywanych w:

  • Interfejs API pamięci podręcznej
  • Ciastka
  • 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 powinna być używana)
  • 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. W celu ochrony najważniejszych danych, które mogą nie być przechowywane w chmurze lub mogą spowodować znaczną utratę danych, trwała pamięć masowa może być pomocnym narzędziem pozwalającym zadbać o to, aby przeglądarka nie usuwała danych z przeglądarki, gdy na urządzeniu lokalnym jest zajęte miejsce. 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

Specjalne podziękowania za zapoznanie się z tym artykułem: Victor Costan i Joe Medley. To zasługa Chrisa Wilsona, który napisał oryginalną wersję tego artykułu, która po raz pierwszy ukazała się w WebFundamentals.

Baner powitalny: Umberto w aplikacji Unsplash