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.
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 entwederfalse
(Standardwert) odertrue
.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.