Nicht jeder Speicher ist gleich: Jetzt neu: Storage-Buckets

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.

Benutzeroberfläche der E-Mail-App
E-Mail-App mit separaten Speicher-Buckets für Posteingang und Entwürfe. (Nur zur Veranschaulichung, entspricht nicht unbedingt der Funktionsweise von Gmail.)

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 sind false (Standardeinstellung) oder true.
  • 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.
// 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.

Der Storage-Buckets-Baum im Bereich „Speicher“ vor und nach der Aktivierung

Nützliches Infomaterial