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:
- L'aggiornamento sul sito chromium.org
- Ulteriori dettagli su IndexedDB at MDN
- Un esempio completo su come utilizzare indexDB in una semplice app web con elenco di cose da fare
Quindi fino alla prossima volta... continua a espandere il web vicino ai territori.