Signatur
Beschreibung
Die Eigenschaft durability eines IDBTransaction-Objekts gibt den Haltbarkeitshinweis zurück, den man beim Öffnen der Transaktion über IDBDatabase.transaction(storeNames, mode, { durability }) angegeben hat. Der Hinweis sagt dem Browser, wie wichtig es ist, dass die Daten nach dem Commit wirklich auf dem Datenträger stehen, bevor das complete-Ereignis ausgelöst wird.
Mögliche Werte:
"strict": Der Browser meldet die Transaktion erst dann als abgeschlossen, wenn alle Änderungen dauerhaft auf den Datenträger geschrieben wurden (z. B. perfsync). Das ist am sichersten, aber langsamer."relaxed": Der Browser darf die Transaktion schon dann als abgeschlossen melden, wenn die Änderungen an das Betriebssystem übergeben wurden, auch wenn sie noch nicht auf dem Datenträger liegen. Das ist schneller, bei einem Absturz oder Stromausfall können die letzten Änderungen aber verloren gehen."default": Es gilt das Standardverhalten des Browsers. Chromium verhält sich seit Version 121 wie"relaxed", Firefox standardmäßig ebenfalls wie"relaxed".
Nützlich ist die Eigenschaft vor allem zum Debuggen, zum Protokollieren und in Hilfsfunktionen, die eine Transaktion übergeben bekommen und abhängig von ihrer Haltbarkeitsstufe reagieren sollen. Setzen lässt sich der Wert nur beim Erzeugen der Transaktion, danach ist er unveränderlich.
Rückgabewert
"default".Beispiele
Haltbarkeit beim Erzeugen festlegen und auslesen
const request = indexedDB.open('notizen-db', 1);
request.onupgradeneeded = () => {
request.result.createObjectStore('notizen', { keyPath: 'id' });
};
request.onsuccess = () => {
const db = request.result;
// Kritische Daten: strikt auf den Datenträger schreiben
const tx = db.transaction('notizen', 'readwrite', { durability: 'strict' });
console.log(tx.durability);
tx.objectStore('notizen').put({ id: 1, text: 'Wichtige Notiz' });
tx.oncomplete = () => console.log('Sicher gespeichert');
};
Standardwert ohne Optionsobjekt
const request = indexedDB.open('notizen-db', 1);
request.onsuccess = () => {
const db = request.result;
const tx = db.transaction('notizen', 'readonly');
console.log(tx.durability);
};
Schnelle Cache-Schreibvorgänge mit "relaxed" und Protokollierung
const openDb = () =>
new Promise((resolve, reject) => {
const req = indexedDB.open('cache-db', 1);
req.onupgradeneeded = () => req.result.createObjectStore('antworten');
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
});
const logTransaction = (tx) => {
console.log(`Modus: ${tx.mode}, Haltbarkeit: ${tx.durability}`);
};
const cacheSpeichern = async (url, daten) => {
const db = await openDb();
// Cache-Daten lassen sich neu laden, Verlust ist verkraftbar
const tx = db.transaction('antworten', 'readwrite', { durability: 'relaxed' });
logTransaction(tx);
tx.objectStore('antworten').put(daten, url);
await new Promise((resolve, reject) => {
tx.oncomplete = resolve;
tx.onerror = () => reject(tx.error);
});
};
cacheSpeichern('/api/produkte', [{ id: 1, name: 'Tasse' }]);
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
tx.durability = 'strict'wird ignoriert (im Strict Mode gibt es einenTypeError). Festlegen lässt sich der Wert nur über das dritte Argument vonIDBDatabase.transaction(). - Nur ein Hinweis: Der Browser muss sich nicht daran halten. Auch mit
"strict"kann das Betriebssystem oder die Hardware Daten puffern. - Unterschiedliche Standardwerte: Wie sich
"default"verhält, legt der Browser fest. Chromium hat mit Version 121 von strict- auf relaxed-ähnliches Verhalten umgestellt. Für wichtige Daten wie Zahlungen oder Formularentwürfe sollte man"strict"deshalb ausdrücklich angeben. - Performance:
"strict"kann Schreibvorgänge deutlich verlangsamen, besonders bei vielen kleinen Transaktionen. Mehrere Schreibvorgänge in einer Transaktion zu bündeln hilft. - Kompatibilität: Unterstützt in Chrome/Edge ab 83, Safari ab 15 und Firefox ab 126. In älteren Browsern ist die Eigenschaft
undefined, und die Optiondurabilitywird stillschweigend ignoriert. Zur Feature-Erkennung:'durability' in IDBTransaction.prototype.