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.
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 tofalse
(domyślna) lubtrue
.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'
.
- Zasobniki (
// 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.