Der Speicherstandard definiert eine API für nichtflüchtigen Speicher und Kontingentschätzungen sowie die Speicherarchitektur der Plattform. Wir führen eine API ein, mit der das Auslagern von Daten aus dem nichtflüchtigen Speicher bei hoher Arbeitsspeicherauslastung besser vorhersehbar ist. Sie ist ab Chromium 122 verfügbar.
Welches Problem löst der Speicherstandard?
Wenn der Nutzer auf seinem Gerät keinen Speicherplatz mehr hat, gehen die mit APIs wie IndexedDB oder localStorage
gespeicherten Daten verloren, ohne dass der Nutzer eingreifen kann. Sie können den Speicher persistent machen, indem Sie die Methode persist()
der StorageManager
-Schnittstelle aufrufen. Gleichzeitig wird der Endnutzer um Erlaubnis gebeten und der Speicher wird nach der Erteilung in einen dauerhaften Speicher umgewandelt:
const persisted = await navigator.storage.persist();
if (persisted) {
/* Storage will not be cleared except by explicit user action. */
}
Bei dieser Methode wird entweder der gesamte Speicherplatz oder gar keiner verwendet. Es gibt keine Möglichkeit, detailliertere Anforderungen an die Persistenz auszudrücken. Es ist ein einziger Speicher-Bucket.
Storage Buckets API
Der Hauptzweck der Storage Buckets API besteht darin, Websites die Möglichkeit zu geben, mehrere Storage Buckets zu erstellen, bei denen der Browser jeden Bucket unabhängig von anderen löschen kann. So können Entwickler eine Auslagerungspriorisierung festlegen, damit die wertvollsten Daten nicht gelöscht werden.
Beispiel für einen Anwendungsfall
Um zu veranschaulichen, wo Speicher-Buckets nützlich sind, stellen Sie sich eine E-Mail-Anwendung vor. Es wäre unentschuldbar, wenn die App die nicht gesendeten Entwürfe des Nutzers verliert, die nur auf dem Client vorhanden sind. Wenn sie dagegen auf einem Server gespeichert sind, würde der Nutzer wahrscheinlich damit einverstanden sein, dass einige seiner ältesten E-Mails aus dem Posteingang entfernt werden, wenn sein Browser stark ausgelastet ist.
Storage Buckets API verwenden
Neuen Storage-Bucket erstellen
Mit der Methode open()
auf der Benutzeroberfläche StorageBucketManager
kann ein neuer Speicher-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 der open()
-Methode die Optionen durability
und persisted
als Argumente übergeben:
persisted
gibt an, ob der Speicher-Bucket beibehalten werden soll. Zulässige Werte sindfalse
(Standardeinstellung) odertrue
.durability
gibt dem Browser einen Hinweis, mit dem er die Schreibleistung gegen ein reduziertes Risiko von Datenverlusten bei Stromausfällen abwägt. Zulässige Werte sind'relaxed'
(Standard) oder'strict'
:- Mit
'strict'
-Buckets wird versucht, das Risiko von Datenverlusten bei einem Stromausfall zu minimieren. Dies kann zu einer geringeren Leistung führen, was bedeutet, dass Schreibvorgänge länger dauern, sich die Gesamtsystemleistung beeinträchtigen, mehr Akkuleistung verbrauchen und das Speichergerät schneller verschleißen können. - Bei einem Stromausfall werden in
'relaxed'
-Buckets möglicherweise Schreibvorgänge vergessen, die in den letzten Sekunden abgeschlossen wurden. Das Schreiben von Daten in diese Bucket kann sich jedoch positiv auf die Leistung auswirken, die Akkulaufzeit verlängern und die Lebensdauer des Speichergeräts erhöhen. Außerdem führt ein Stromausfall nicht häufiger zu Datenbeschädigungen als bei'strict'
-Buckets.
- Mit
// 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, die Cache-Schnittstelle oder die File-Schnittstelle. Diese Speicher-APIs funktionieren wie gewohnt, nur dass der Einstiegspunkt über die StorageBucket
-Oberfläche 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
Sie können Speicher-Buckets in einem eigenen Verzeichnis im Bereich Anwendung > Speicher prüfen.