Der Storage Standard definiert eine API für die dauerhafte Speicherung und Kontingentschätzungen sowie die Speicherarchitektur der Plattform. Wir führen eine API ein, mit der das Entfernen von persistentem Speicher bei starker Speicherauslastung besser vorhersehbar wird. Sie ist ab Chromium 122 verfügbar.
Welches Problem wird durch den Speicherstandard gelöst?
Wenn der Speicherplatz auf dem Gerät des Nutzers knapp wird, gehen die mit APIs wie IndexedDB oder localStorage
gespeicherten Daten verloren, ohne dass der Nutzer eingreifen kann. Eine Möglichkeit, den Speicher persistent zu machen, besteht darin, die Methode persist()
der Schnittstelle StorageManager
aufzurufen. Gleichzeitig wird der Endnutzer um die Berechtigung gebeten und der Speicher wird nach Erteilung der Berechtigung dauerhaft geändert:
const persisted = await navigator.storage.persist();
if (persisted) {
/* Storage will not be cleared except by explicit user action. */
}
Bei dieser Methode zum Anfordern des Beibehaltens von Speicher gilt das Alles-oder-Nichts-Prinzip. Es gibt keine Möglichkeit, detailliertere Anforderungen an die Persistenz anzugeben. Es ist alles ein Storage-Bucket.
Storage Buckets API
Die Storage Buckets API ermöglicht es Websites, mehrere Storage-Buckets zu erstellen, die der Browser unabhängig voneinander löschen kann. So können Entwickler die Priorisierung für das Entfernen von Daten festlegen, damit die wichtigsten Daten nicht gelöscht werden.
Beispiel für einen Anwendungsfall
Ein Beispiel für die Verwendung von Speicher-Buckets ist eine E‑Mail-Anwendung. Es wäre unverzeihlich, wenn die App die nicht gesendeten Entwürfe des Nutzers verlieren würde, die nur auf dem Client vorhanden sind. Wenn sie hingegen auf einem Server gespeichert sind, ist es für den Nutzer wahrscheinlich in Ordnung, wenn einige seiner ältesten E-Mails im Posteingang aus dem Client entfernt werden, wenn der Speicherplatz im Browser knapp wird.

Storage Buckets API verwenden
Neuen Storage-Bucket erstellen
Mit der Methode open()
auf der StorageBucketManager
-Schnittstelle kann ein neuer Storage-Bucket erstellt werden.
// Create a storage bucket for emails that are synchronized with the
// server.
const inboxBucket = await navigator.storageBuckets.open('inbox');
Neuen persistenten Storage-Bucket erstellen
Damit der Speicher-Bucket beibehalten wird, können Sie die Optionsargumente durability
und persisted
an die Methode open()
übergeben:
persisted
bestimmt, ob der Storage-Bucket beibehalten werden soll. Die zulässigen Werte sind entwederfalse
(Standard) odertrue
.durability
gibt dem Browser einen Hinweis, der ihm hilft, die Schreibleistung gegen ein geringeres Risiko von Datenverlust bei Stromausfällen abzuwägen. Zulässige Werte sind'relaxed'
(Standard) oder'strict'
:'strict'
-Buckets sollen das Risiko von Datenverlusten bei Stromausfällen minimieren. Dies kann zu einer geringeren Leistung führen. Schreibvorgänge können länger dauern, die allgemeine Systemleistung kann beeinträchtigt werden, es kann mehr Akkuleistung verbraucht werden und das Speichermedium kann schneller verschleißen.- Bei einem Stromausfall kann es vorkommen, dass
'relaxed'
-Buckets Schreibvorgänge „vergessen“, die in den letzten Sekunden abgeschlossen wurden. Im Gegenzug kann das Schreiben von Daten in diese Buckets eine bessere Leistung ermöglichen, die Akkulaufzeit verlängern und die Lebensdauer des Speichermediums verlängern. Außerdem führt ein Stromausfall nicht häufiger zu Datenbeschädigungen als bei'strict'
-Buckets.
// 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`.
});
Über einen Speicher-Bucket auf die Speicher-APIs zugreifen
Jeder Speicher-Bucket ist mit Speicher-APIs verknüpft, z. B. IndexedDB, der Cache-Schnittstelle oder der File-Schnittstelle. Diese Speicher-APIs funktionieren wie gewohnt, nur dass der Einstiegspunkt über die StorageBucket
-Schnittstelle erfolgt, z. B. 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);
});
Storage-Buckets in den Entwicklertools debuggen
Speicher-Buckets können Sie in einem speziellen Baum im Bereich Anwendung > Speicher untersuchen.