Der Standarddauerhaftigkeitsmodus in IndexedDB ändert sich in Chrome 121 von strict
zu relaxed
. Diese Anpassung soll die Leistung verbessern und mit anderen gängigen Browsern wie Firefox und Safari übereinstimmen. Im Blogpost werden die Details dieser Änderung und ihre Bedeutung für Webentwickler erläutert.
IndexedDB-Dauermodi
IndexedDB ist eine leistungsstarke Web-API zum Speichern großer Mengen strukturierter Daten. Sie bietet zwei Dauerhaftigkeitsmodi für readwrite
-Transaktionen:
strict
:In diesem Modus wird das Betriebssystem ausdrücklich angewiesen, Änderungen auf die Festplatte zu schreiben, bevor das Ereigniscomplete
ausgegeben wird.relaxed
: In diesem Modus wird das standardmäßige Auslagerungsverhalten des Betriebssystems verwendet und dascomplete
-Ereignis wird ausgegeben, nachdem Änderungen den Betriebssystem-Puffer erreicht haben, der in der Regel alle paar Sekunden geleert wird.
Beachten Sie, dass strict
nicht dafür sorgt, dass Änderungen tatsächlich sofort auf die Festplatte geschrieben werden. Nachdem eine Website put()
aufgerufen hat, vergeht noch eine gewisse Zeit, in der ein Stromausfall dazu führen kann, dass die Änderung nicht auf die Festplatte geschrieben wird und daher bei der nächsten Ausführung der App fehlt.
Bei Garantien mit strict
-Dauerhaftigkeit wird das IndexedDB-Transaktionsereignis complete
erst nach dem tatsächlichen Schreiben der Daten ausgelöst. Bei relaxed
-Dauerhaftigkeit werden die Daten noch geschrieben, wenn das complete
-Ereignis ausgelöst wird. Weitere Informationen zum gesamten Prozess
strict
ist also nur für Vorgänge geeignet, bei denen Sie auf jeden Fall wissen müssen, dass der Vorgang abgeschlossen wurde, bevor Sie mit dem nächsten fortfahren. Die Datenmigration ist ein Beispiel, bei dem die strict
-Dauerhaftigkeit erforderlich ist. Wenn Sie von einem Sicherungsspeicher zu einem anderen wechseln, sollten Sie das alte Format erst löschen, wenn das neue Format geschrieben wurde. So ermöglicht die strict
-Dauerhaftigkeit einen Migrationsablauf, der bei einem Ausfall zur Hälfte der Migration fortgesetzt werden kann.
Änderung des Standardmodus für die Haltbarkeit
Der entscheidende Aspekt dieser Änderung ist der Standarddauerhaftigkeitsmodus für readwrite
-Transaktionen in Chrome. Bisher war strict
standardmäßig festgelegt, was sofortige Laufwerkschreiben bei Datenänderungen zur Folge hatte. Aus Leistungsgründen und zur besseren Abstimmung mit anderen gängigen Browsern, die alle relaxed
verwenden, wird Chrome jedoch ebenfalls die Standardeinstellung auf relaxed
ändern.
Mit dieser Änderung soll ein besseres Gleichgewicht zwischen Leistung und Datenbeständigkeit erreicht werden. Während strict
für maximale Datenausfallsicherheit sorgt, ist relaxed
für viele Webanwendungen oft ausreichend und kann die Leistung auf folgende Weise erheblich verbessern:
- Geschwindigkeit: In realen Beispielen konnte das Chrome-Team Geschwindigkeitsverbesserungen zwischen dem Drei- und dem Dreißigfachen feststellen.
- Laufwerksdauer, insbesondere bei Geräten mit SSD (Solid State Drive).
- Längere Akkulaufzeit.
- Die Lesegeschwindigkeit wurde verbessert. 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 profitiert davon, da Laufwerkvorgänge eine freigegebene Systemressource sind.
Interoperabilität und Kompatibilität
Ein wichtiger Aspekt dieser Änderung ist ihre Auswirkung auf Interoperabilität und Kompatibilität. Durch die Anpassung an das Verhalten anderer großer Browseranbieter verbessert Chromium die Interoperabilität. Der Standard selbst ermöglicht unterschiedliche Implementierungen. Diese Änderung soll diese Implementierungen harmonisieren. Weitere Informationen zu dieser Änderung findest du in diesem GitHub-Issue.
Was bedeutet das für Webentwickler?
Durch diese Änderung wird keine neue API-Oberfläche eingeführt. Die vorhandene IndexedDB API bleibt unverändert. Diese Änderung wirkt sich hauptsächlich auf das Standardverhalten von readwrite
-Transaktionen aus. Sie können beim Erstellen von Transaktionen den gewünschten Dauerhaftigkeitsmodus angeben, um die Datendauerhaftigkeit und Leistung zu steuern. Im folgenden Codebeispiel wird gezeigt, wie das alte Verhalten wiederhergestellt wird, indem im Optionsarray durability
auf strict
gesetzt wird.
let db;
const DBOpenRequest = window.indexedDB.open("toDoList", 4);
DBOpenRequest.onsuccess = (event) => {
db = DBOpenRequest.result;
};
const transaction = db.transaction(
['toDoList'],
'readwrite',
{ durability: 'strict' });
Änderungen vor der Veröffentlichung lokal testen
Die Änderung tritt in Chrome 121 in Kraft. Wenn Sie das neue Verhalten vorher lokal testen möchten, aktivieren oder deaktivieren Sie das Flag #indexed-db-default-durability-relaxed
in chrome://flags
.
Weitere Informationen
Weitere technische Details und aktuelle Informationen zu dieser Änderung finden Sie im Tracking-Fehler und im Eintrag zum Chrome-Plattformstatus.
Zusammenfassend lässt sich sagen, dass die Änderung des Standarddauerhaftigkeitsmodus in IndexedDB in Chrome darauf abzielt, die Leistung zu verbessern und gleichzeitig die Kompatibilität mit anderen gängigen Browsern beizubehalten. In den meisten Fällen empfehlen wir, nichts zu unternehmen, da die neue Standardeinstellung Leistungsverbesserungen mit sich bringt. Bei Bedarf können Sie weiterhin Ihren bevorzugten Dauerhaftigkeitsmodus angeben und so die Datendauerhaftigkeit und Leistung Ihrer Webanwendungen steuern.
Danksagungen
Dieser Artikel wurde von Evan Stade und Rachel Andrew geprüft.