Definizione dell'ambito nelle transazioni IndexedDB

Che cos'è IndexedDB?

IndexedDB è uno standard web in continua evoluzione per l'archiviazione di quantità significative di dati strutturati nel browser e per ricerche ad alte prestazioni su questi dati utilizzando gli indici. In altre parole, IndexedDB è un archivio di oggetti. Non è come un database relazionale, che ha tabelle con righe e colonne di raccolte. È una differenza importante e fondamentale che influisce sul modo in cui progetti e crei le tue applicazioni (ulteriori informazioni sui concetti di base).

Quali sono le novità?

Cambia i miei amici... abbiamo alcune modifiche che genereranno alcuni errori se non li gestiamo con una semplice modifica della sintassi.

A partire dalla versione 17, Chrome ora genererà un errore se una transazione IndexedDB non ha come ambito un archivio di oggetti. Poiché tutta la lettura e la scrittura dei dati avviene all'interno delle transazioni, dobbiamo creare una transazione su un database, specificare l'ambito (ad esempio gli archivi di oggetti a cui vuoi accedere) e determinare il tipo di accesso (sola lettura o scrittura).

Cosa significa nel codice? Bene, invece di passare un array vuoto a database.transaction:

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

Devi limitare l'ambito a un determinato archivio di oggetti o a un elenco di archivi di oggetti:

// 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);

Puoi velocizzare l'accesso ai dati utilizzando l'ambito e la modalità corretti nella transazione. Ecco un paio di suggerimenti: quando definisci l'ambito, specifica solo gli archivi di oggetti necessari. In questo modo, puoi eseguire contemporaneamente più transazioni con ambiti non sovrapposti. Specifica una modalità di transazione READ_WRITE solo se necessario. Puoi eseguire contemporaneamente più transazioni READ_ONLY con ambiti che si sovrappongono, ma puoi avere una sola transazione READ_WRITE per un archivio di oggetti.

Altre fonti:

Quindi fino alla prossima volta... continua a espandere il web vicino ai territori.