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

Der Speicherstandard definiert eine API für nichtflüchtigen Speicher und Kontingentschätzungen sowie die Plattformspeicherarchitektur. Wir führen eine API ein, mit der die dauerhafte Speicherbereinigung bei hoher Speicherauslastung berechenbarer wird. Sie ist ab Chromium 122 verfügbar.

Welches Problem löst der Speicherstandard?

Wenn dem Nutzer der Speicherplatz auf seinem Gerät ausgeht, gehen die mit APIs wie IndexedDB oder localStorage gespeicherten Daten verloren, ohne dass der Nutzer eingreifen konnte. Eine Möglichkeit, Speicher persistent zu machen, besteht darin, die Methode persist() der StorageManager-Schnittstelle aufzurufen. Gleichzeitig wird der Endnutzer um die Berechtigung gebeten und der Speicher nach Erteilung in den nichtflüchtigen Speicher geändert:

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

Bei dieser Methode geht es um alles oder nichts. Es gibt keine Möglichkeit, genauere Persistenzanforderungen auszudrücken. Es ist alles ein Storage-Bucket.

Storage Buckets API

Der Grundgedanke der Storage Buckets API besteht darin, Websites die Möglichkeit zu geben, mehrere Storage-Buckets zu erstellen. Dabei kann der Browser jeden Bucket unabhängig von anderen Buckets löschen. So können Entwickler eine Priorisierung der Bereinigung festlegen, damit die wertvollsten Daten nicht gelöscht werden.

Anwendungsbeispiel

Stellen Sie sich eine E-Mail-Anwendung vor, um zu zeigen, wo sich Storage-Buckets als nützlich erweisen könnten. Es wäre nicht zu verzeihen, wenn die nicht gesendeten Entwürfe, die nur auf dem Client vorhanden sind, in der App verloren gehen würden. Wenn sie hingegen auf einem Server gespeichert sind, ist es für den Nutzer wahrscheinlich in Ordnung, wenn einige seiner ältesten Posteingangs-E-Mails vom Client entfernt werden würden, wenn sein Browser starker Speicherbedarf aufweist.

Benutzeroberfläche der E-Mail-App
E-Mail-App mit separaten Storage-Buckets für Posteingang und Entwürfe. (Dies entspricht nicht unbedingt der Funktionsweise von Gmail.)

Storage Buckets API verwenden

Neuen Storage-Bucket erstellen

Mit der Methode open() auf der StorageBucketManager-Oberfläche können Sie einen neuen Storage-Bucket erstellen.

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

Persistenten neuen Storage-Bucket erstellen

Damit der Storage-Bucket dauerhaft gespeichert wird, können Sie die Optionsargumente durability und persisted an die Methode open() übergeben:

  • persisted legt fest, ob der Storage-Bucket beibehalten werden soll. Die zulässigen Werte sind entweder false (Standardwert) oder true.
  • durability gibt dem Browser einen Hinweis, mit dem er die Schreibleistung gegen ein geringeres Risiko von Datenverlusten bei Stromausfällen abwägen kann. Die zulässigen Werte sind 'relaxed' (Standardeinstellung) oder 'strict':

    • 'strict'-Buckets versuchen, das Risiko eines Datenverlusts bei einem Stromausfall zu minimieren. Dies kann auf Kosten einer verringerten Leistung zurückgehen, was bedeutet, dass Schreibvorgänge möglicherweise länger dauern, die gesamte Systemleistung beeinträchtigen, mehr Akkuleistung verbrauchen und das Speichergerät schneller verschwenden können.
    • 'relaxed'-Buckets können Schreibvorgänge löschen, die in den letzten Sekunden abgeschlossen wurden, wenn ein Stromausfall auftritt. Im Gegenzug kann das Schreiben von Daten in diese Buckets bessere Leistungsmerkmale haben und dazu führen, dass der Akku länger hält. Dies kann zu einer längeren Lebensdauer des Speichergeräts führen. Außerdem führt ein Stromausfall nicht mit einer höheren Rate 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 Storage-Bucket auf die Storage APIs zugreifen

Jeder Storage-Bucket ist Storage-APIs zugeordnet, z. B. IndexedDB, Cache-Schnittstelle oder File-Schnittstelle. Diese Speicher-APIs funktionieren wie gewohnt, nur dass der Einstiegspunkt von der StorageBucket-Schnittstelle ist, 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);
});

Fehler in Storage-Buckets in den Entwicklertools beheben

Prüfen Sie Storage-Buckets in einer eigenen Baumstruktur im Bereich Anwendung > Speicher.

Vorher und nach der Aktivierung der Baumstruktur der Storage-Buckets im Bereich „Speicher“.

Nützliches Infomaterial