Bereik definiëren in IndexedDB-transacties

Wat is IndexedDB?

IndexedDB is een evoluerende webstandaard voor de opslag van aanzienlijke hoeveelheden gestructureerde gegevens in de browser en voor hoogwaardige zoekopdrachten op deze gegevens met behulp van indexen. Met andere woorden, IndexedDB is een objectopslag. Het is niet hetzelfde als een relationele database, die tabellen heeft met verzamelingen, rijen en kolommen. Het is een belangrijk en fundamenteel verschil dat van invloed is op de manier waarop u uw applicaties ontwerpt en bouwt (meer over de basisconcepten .

Dus wat is nieuw?

Veranderingen, mijn vrienden... we hebben een aantal veranderingen die tot fouten zullen leiden als we ze niet met eenvoudige syntaxiswijzigingen afhandelen.

Vanaf versie 17 genereert Chrome nu een foutmelding als een IndexedDB-transactie niet is gericht op een objectarchief. Omdat al het lezen en schrijven van gegevens binnen transacties plaatsvindt, moeten we een transactie in een database aanmaken, de reikwijdte specificeren (zoals tot welke objectopslag u toegang wilt krijgen) en het soort toegang bepalen (alleen lezen of schrijven).

Wat betekent het in code? Welnu, in plaats van een lege array door te geven aan onze database.transaction:

var transaction = db.transaction([], IDBTransaction.READ_ONLY);

U moet zich richten op een bepaalde objectopslag of een lijst met objectopslagplaatsen:

// all stores (equivalent to what use to be marked as empty array. )
var transaction = db.transaction(db.objectStoreNames, IDBTransaction.READ_ONLY);

// multiple stores:
var transaction = db.transaction(['ObjectStoreName1', 'ObjectStoreName2'],
    IDBTransaction.READ_ONLY);

// single store - these are equivalent
var transaction = db.transaction(['ObjectStoreName'], IDBTransaction.READ_ONLY);
var transaction = db.transaction('ObjectStoreName', IDBTransaction.READ_ONLY);

U kunt de gegevenstoegang versnellen door de juiste reikwijdte en modus in de transactie te gebruiken. Hier zijn een paar tips: Geef bij het definiëren van het bereik alleen de objectopslagplaatsen op die u nodig heeft. Op deze manier kunt u meerdere transacties met niet-overlappende bereiken tegelijkertijd uitvoeren. Geef alleen een READ_WRITE transactiemodus op wanneer dat nodig is. U kunt gelijktijdig meerdere READ_ONLY transacties met overlappende bereiken uitvoeren, maar u kunt slechts één READ_WRITE transactie voor een objectarchief hebben.

Andere bronnen:

Dus tot de volgende keer... blijf het internet naar nabije gebieden pushen.