Definizione dell'ambito nelle transazioni IndexedDB

Che cos'è IndexedDB?

IndexedDB è uno standard web in 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 è uno spazio di archiviazione di oggetti. Non è come un database relazionale, che ha tabelle con righe e colonne di raccolte. Si tratta di una differenza importante e fondamentale che influisce sul modo in cui progetti e crei le tue applicazioni (scopri di più sui concetti di base).

Quali sono le novità?

Modifiche, amici miei… alcune modifiche causeranno errori se non le gestiamo con una semplice modifica della sintassi.

A partire dalla versione 17, Chrome ora genera un errore se una transazione IndexedDB non è limitata a un object store. Poiché tutte le letture e le scritture dei dati vengono eseguite all'interno delle transazioni, dobbiamo creare una transazione su un database, specificare l'ambito (ad esempio gli oggetti a cui vuoi accedere) e determinare il tipo di accesso (sola lettura o scrittura).

Che cosa significa nel codice? Invece di passare un array vuoto alla nostra transazione database.transaction:

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

Devi specificare l'ambito di un determinato object store o di un elenco di object store:

// 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 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 sovrapposti, ma puoi avere una sola transazione READ_WRITE per un object store.

Altre fonti:

Alla prossima… continua a spingere il web verso i territori vicini.