Définir le champ d'application dans les transactions IndexedDB

Qu'est-ce que IndexedDB ?

IndexedDB est une norme Web en constante évolution qui permet de stocker d'importantes quantités de données structurées dans le navigateur et d'effectuer des recherches hautes performances sur ces données à l'aide d'index. En d'autres termes, IndexedDB est un magasin d'objets. Elle se distingue d'une base de données relationnelle qui contient des tables avec des lignes et des colonnes de collections. Il s'agit d'une différence importante et fondamentale qui affecte la façon dont vous concevez et créez vos applications (plus d'informations sur les concepts de base).

Quelles sont les nouveautés ?

Ça change mes amis... Nous avons des changements qui généreront des erreurs si nous ne les traitons pas avec un simple changement de syntaxe.

À partir de la version 17, Chrome génère une erreur si une transaction IndexedDB n'est pas limitée à un magasin d'objets. Étant donné que toutes les opérations de lecture et d'écriture de données s'effectuent au sein de transactions, nous devons créer une transaction sur une base de données, spécifier le champ d'application (par exemple, les magasins d'objets auxquels vous souhaitez accéder) et déterminer le type d'accès (lecture seule ou écriture).

Qu'est-ce que cela signifie dans le code ? Au lieu de transmettre un tableau vide à notre database.transaction:

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

Vous devez limiter la portée à un magasin d'objets particulier ou à une liste de magasins d'objets:

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

Vous pouvez accélérer l'accès aux données en utilisant le champ d'application et le mode appropriés dans la transaction. Voici quelques conseils : Lorsque vous définissez le champ d'application, spécifiez uniquement les magasins d'objets dont vous avez besoin. De cette façon, vous pouvez exécuter simultanément plusieurs transactions avec des champs d'application qui ne se chevauchent pas. Spécifiez un mode de transaction READ_WRITE uniquement si nécessaire. Vous pouvez exécuter simultanément plusieurs transactions READ_ONLY avec des champs d'application qui se chevauchent, mais vous ne pouvez utiliser qu'une seule transaction READ_WRITE par magasin d'objets.

Autres sources:

À bientôt... Continuez à parcourir le Web dans des territoires proches.