Nie wszystkie miejsca na dane są sobie równe: wprowadzenie zasobników pamięci masowej

Storage Standard definiuje interfejs API do pamięci trwałej oraz szacowanych limitów miejsca i architekturę pamięci masowej platformy. Wprowadzamy interfejs API do trwałego usuwania pamięci masowej wykorzystanie pamięci jest bardziej przewidywalne. Jest ona dostępna w wersji Chromium 122.

Jaki problem rozwiązuje standard pamięci masowej?

Zazwyczaj, gdy użytkownikowi zaczyna brakować miejsca na urządzeniu, dane są zapisywane przez interfejsy API takie jak Dane IndexedDB lub localStorage zostają utracone bez interwencji użytkownika. Sposób na Trwałe pamięć masowa to wywołanie metody persist() funkcji interfejsu StorageManager. Jednocześnie prosi użytkownika o zgodę i zmienia aby pamięć była trwała po przyznaniu:

const persisted = await navigator.storage.persist();
if (persisted) {
  /* Storage will not be cleared except by explicit user action. */
}

Ta metoda wysyłania prośby o zachowanie miejsca na dane to cała metoda lub nic. Nie da się wyrazić więcej do konkretnych wymagań dotyczących trwałości. Wszystko to zajmuje 1 zasobnik na dane.

Interfejs Storage Buckets API

Podstawową koncepcją interfejsu Storage Buckets API jest umożliwiają witrynom tworzenie wielu zasobników na dane, za pomocą których przeglądarka może i usuwać każdy z zasobników niezależnie od innych. Dzięki temu deweloperzy mogą określić usunięcie Ustalenie priorytetów, dzięki czemu najcenniejsze dane nie zostaną usunięte.

Przykład zastosowania

Aby pokazać, gdzie mogą przydać się zasobniki na dane, wyobraź sobie aplikację e-mailową. Byłoby to nie można wytłumaczyć, jeśli aplikacja utraciła niewysłane przez użytkownika wersje robocze, które istnieją tylko w kliencie. Jeśli natomiast jeśli są przechowywane na serwerze, użytkownik prawdopodobnie nie będzie już działał z niektórymi najstarszymi e-mailami w skrzynce odbiorczej mogą być usuwane z klienta, jeśli jego przeglądarka mocno korzysta z miejsca na dane.

Interfejs aplikacji do poczty e-mail
Aplikacja do poczty e-mail z oddzielnymi zasobnikami na skrzynkę odbiorczą i wersje robocze. (wyłącznie w celach ilustracyjnych nie zawsze odzwierciedla to sposób działania Gmaila).

Użyj interfejsu Storage Buckets API

Tworzenie nowego zasobnika na dane

Nowy zasobnik na dane można utworzyć za pomocą metody open() w: StorageBucketManager za pomocą prostego interfejsu online.

// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');

Tworzenie trwałego nowego zasobnika na dane

Aby mieć pewność, że zasobnik na dane będzie utrwalony, możesz przekazać opcje durability i persisted argumenty metody open():

  • persisted określa, czy zasobnik na dane powinien zostać utrwalony. Dozwolone wartości to false (domyślna) lub true.
  • durability zawiera wskazówkę dla przeglądarki, która pomaga uzyskać kompromis między wydajnością zapisu a mniejsze ryzyko utraty danych w przypadku awarii zasilania. Dozwolone wartości to 'relaxed' (domyślna) lub 'strict':

    • Zasobniki ('strict') próbują zminimalizować ryzyko utraty danych w przypadku awarii zasilania. Może się ona pojawić: koszt zmniejszonej wydajności, co oznacza, że operacje zapisu mogą trwać dłużej, co może mieć wpływ ogólna wydajność systemu, może zużywać więcej energii i może zużywać urządzenie pamięci masowej szybciej.
    • Zasobniki ('relaxed') mogą „zapomnieć” zapisuje wykonane w ciągu ostatnich kilku sekund, nastąpi utrata zasilania. Z kolei zapisywanie danych do tych zasobników może zwiększyć wydajność i mogą wydłużyć czas pracy na baterii, a przez to wydłużyć czas jej przechowywania. od początku śledzenia. Awaria zasilania nie powoduje też częstszego uszkodzenia danych Zasobniki: 'strict'.
// Create a storage bucket for email drafts that only exist on the client.
const draftsBucket = await navigator.storageBuckets.open('drafts', {
  durability: 'strict', // Or `'relaxed'`.
  persisted: true, // Or `false`.
});

Dostęp do interfejsów API pamięci masowej z zasobnika na dane

Każdy zasobnik na dane jest powiązany z interfejsami API pamięci masowej, na przykład IndexedDB, interfejsu Cache Interfejs Plik. Te interfejsy API do przechowywania danych działają zgodnie z jak zwykle – punkt wejścia pochodzi z interfejsu StorageBucket, na przykład StorageBucket.indexedDB

const inboxDb = await new Promise(resolve => {
  const request = inboxBucket.indexedDB.open('messages');
  request.onupgradeneeded = () => { /* migration code */ };
  request.onsuccess = () => resolve(request.result);
  request.onerror = () => reject(request.error);
});

Debugowanie zasobników na dane w Narzędziach deweloperskich

Sprawdź zasobniki na dane w specjalnym drzewie w sekcji Aplikacja > Miejsce na dane.

Drzewo zasobników na dane przed włączeniem i po jego włączeniu w sekcji Miejsce na dane.

Przydatne materiały