Änderung am Standardmodus für Langlebigkeit in IndexedDB

Der Standardmodus für Langlebigkeit wird in IndexedDB von Chrome 121 von strict zu relaxed geändert. Diese Anpassung dient der Verbesserung der Leistung und der Anpassung an andere gängige Browser wie Firefox und Safari. Im Blogpost werden die Details dieser Änderung und ihre Auswirkungen für Webentwickler erläutert.

Langlebigkeitsmodi von IndexedDB

IndexedDB, eine leistungsstarke Web-API zum Speichern großer Mengen strukturierter Daten, bietet zwei Langlebigkeitsmodi für readwrite-Transaktionen:

  • strict:In diesem Modus wird das Betriebssystem explizit angewiesen, Änderungen auf dem Laufwerk zu leeren, bevor das complete-Ereignis ausgelöst wird.
  • relaxed Dieser Modus basiert auf dem standardmäßigen Leerungsverhalten des Betriebssystems und gibt das Ereignis complete aus, nachdem Änderungen in den Zwischenspeicher des Betriebssystems übernommen wurden. Dieser Modus wird in der Regel alle paar Sekunden geleert.

Beachten Sie, dass strict nicht sicherstellt, dass Änderungen tatsächlich sofort auf die Festplatte geschrieben werden. Nachdem eine Website put() aufgerufen hat, gibt es immer noch eine begrenzte Zeit, in der ein Stromausfall dazu führen kann, dass die Änderung nicht auf das Laufwerk übertragen wird und daher bei der nächsten Ausführung der App fehlt.

Was die Langlebigkeit von strict angeht, wird das Ereignis complete der IndexedDB-Transaktion erst ausgelöst, nachdem die Daten tatsächlich geschrieben wurden. Bei einer relaxed-Langlebigkeit werden die Daten dagegen noch geschrieben, wenn das complete-Ereignis ausgelöst wird. Weitere Informationen zum vollständigen Ablauf finden Sie in dieser Erklärung.

strict ist also eigentlich nur für Operationen gedacht, bei denen Sie absolut wissen müssen, dass sie geschrieben wurden, bevor Sie den nächsten Schritt ausführen. Die Datenmigration ist ein Beispiel für die Langlebigkeit von strict. Wenn Sie von einem Sicherungsspeicher zu einem anderen wechseln, sollten Sie das alte Format erst löschen, wenn das neue geschrieben wurde. Auf diese Weise erleichtert die Langlebigkeit von strict eine Migrationsroutine, die nach einem Fehler nach der Hälfte der Probleme wiederhergestellt werden kann.

Änderung des standardmäßigen Langlebigkeitsmodus

Der entscheidende Aspekt dieser Änderung ist der standardmäßige Langlebigkeitsmodus für readwrite-Transaktionen in Chrome. Bisher war die Standardeinstellung strict, wodurch sofortige Schreibvorgänge auf dem Laufwerk bei Datenänderungen sichergestellt wurden. Aufgrund von Leistungsaspekten und der Anpassung an andere gängige Browser, die alle relaxed verwenden, plant Chrome außerdem, die Standardeinstellung in relaxed zu ändern.

Diese Änderung soll für ein besseres Gleichgewicht zwischen Leistung und Langlebigkeit der Daten sorgen. strict sorgt zwar für maximale Langlebigkeit der Daten, relaxed ist jedoch häufig für viele Webanwendungen ausreichend und kann die Leistung auf folgende Weise erheblich verbessern:

  • Geschwindigkeit: An realen Beispielen konnte das Chrome-Team die Geschwindigkeit um das 3- bis 30-Fache verbessern.
  • Langlebigkeit von Laufwerken, insbesondere bei Geräten mit Solid State Disks (SSD).
  • Längere Akkulaufzeit.
  • Eine Verbesserung der Lesegeschwindigkeit. Aufgrund der Architektur von IndexedDB, bei der Lesetransaktionen häufig hinter Schreibtransaktionen blockiert werden, wird die Lesegeschwindigkeit als sekundärer Effekt verbessert.
  • Das gesamte Gerät wird positiv beeinflusst, da Laufwerksvorgänge eine gemeinsam genutzte Systemressource sind.

Interoperabilität und Kompatibilität

Ein wichtiger Aspekt dieser Änderung sind ihre Auswirkungen auf die Interoperabilität und Kompatibilität. Durch die Anpassung an das Verhalten anderer großer Browseranbieter verbessert Chromium die Interoperabilität. Der Standard selbst lässt verschiedene Implementierungen zu. Durch diese Änderung sollen diese Implementierungen vereinheitlicht werden. Weitere Informationen zu dieser Änderung finden Sie in dieser GitHub-Ausgabe.

Was bedeutet das für Webentwickler?

Durch diese Änderung wird keine neue API-Oberfläche eingeführt. Die vorhandene IndexedDB API bleibt unverändert und diese Änderung betrifft hauptsächlich das Standardverhalten von readwrite-Transaktionen. Sie können beim Erstellen von Transaktionen Ihren bevorzugten Langlebigkeitsmodus festlegen und so die Langlebigkeit und Leistung von Daten steuern. Das folgende Codebeispiel zeigt, wie Sie das alte Verhalten wiederherstellen können, indem Sie durability im optionalen Options-Array auf strict setzen.

let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
  db = DBOpenRequest.result;
};
const transaction = db.transaction(
  ['toDoList'],
  'readwrite',
  { durability: 'strict' });

Änderung vor dem Versand lokal testen

Die Änderung tritt in Chrome 121 in Kraft. Wenn Sie das neue Verhalten zuvor lokal testen möchten, ändern Sie das Flag #indexed-db-default-durability-relaxed in chrome://flags.

Weitere Informationen

Weitere technische Details und aktuelle Informationen zu dieser Änderung finden Sie unter Tracking-Fehler und im Statuseintrag der Chrome-Plattform.

Zusammenfassend lässt sich sagen, dass durch die Änderung des standardmäßigen Langlebigkeitsmodus in IndexedDB die Leistung verbessert und gleichzeitig die Kompatibilität mit anderen wichtigen Browsern aufrechterhalten werden soll. Wir empfehlen in den meisten Fällen, nichts zu unternehmen, da durch die neue Standardeinstellung die Leistung verbessert wird. Bei Bedarf können Sie Ihren bevorzugten Langlebigkeitsmodus weiter festlegen und die Kontrolle über die Langlebigkeit und Leistung von Daten in Ihren Webanwendungen übernehmen.

Danksagungen

Dieser Artikel wurde von Evan Stade und Rachel Andrew geprüft.