Cet article nécessite une relecture technique. Voici comment vous pouvez aider.
Cet article nécessite une relecture rédactionnelle. Voici comment vous pouvez aider.
La propriété mode
de l'interface IDBTransaction
renvoie le mode d'accès aux magasins d'objets
de la transaction
et à la base de données. La valeur par défaut étant readonly
.
Depuis Firefox 40, les transactions IndexedDB diminuent en efficacité pour gagner en efficience (voir bug 1112702.) Auparavant, dans une transaction en readwrite
l'événement complete était déclanché seulement lorsque toutes les données étaient écrites sur le disque. Maintenant l'événement complete
est déclenché après que l'OS ai envoyé l'ordre d'écrire les données, mais potentiellement avant qu'elles aient été écrites sur le disque. L'événement complete
peut ainsi se déclancher plus rapidement qu'auparavant, cependant, il existe une chance infime pour que l'ensemble de la transaction soit perdue si le système d'exploitation plante ou s'il y a une perte de courant avant que les données aient été écites sur le disque. Étant donné que ces événements catastrophiques sont rares la plupart des utilisateurs ne devraient pas avoir à s'en préoccuper davantage.
Si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculé plus tard), vous pouvez forcer l'enregistrement complet sur disque avant de déclencher l'événement complete
en utilisant le mode readwriteflush
(non standard) expérimentale ( voir IDBDatabase.transaction
). C'est expérimentale, et ne peut être utilisé que si le dom.indexedDB.experimental
pref est réglé sur true
dans about: config.
Syntaxe
var myCurrentMode = transaction.mode;
Valeur
Le mode
d'accès aux magasins d'objets
et à la base de données:
Valeur | Explication |
---|---|
readonly |
permet de prendre des objets dans les magasins d'objets, de lire les index et de faire des curseurs. |
readwrite |
Permet en plus de que l'on peut faire en readonly, d'ajouter et mettre à jour des objets dans les magasins d'objets. |
versionchange |
Permet toute les opérations, y compris celles qui suppriment ou ajoutent des magasins d'objets ou des index . Ce mode met à jour le numéro de version de la base de données, il se sert au début de IDBDatabase.setVersion . Les transactions dans ce mode ne peuvent pas fonctionner en même temps que d'autres. |
readwriteflush |
Depuis Firefox 40, si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculé plus tard), vous pouvez forcer l'enregistrement complet sur disque avant de déclencher l'événement |
Exemple
Dans le code suivant, on ouvre une connexion
à la base de donnée. Sur cette connexion on démarre une transaction
en lecture/écriture pour accéder au magasin d'objet
"toDoList" et y ajouter
un enregistrement. Notez également les gestionnaires d'événements oncomplete
et onerror
de la transaction qui affiche sur la page le résultat de la transaction.
La propriété mode
sert à la fin pour renvoyer le mode de la transaction .
//Connexion à la base de données var DBOpenRequest = window.indexedDB.open("toDoList", 4); DBOpenRequest.onsuccess = function(event) { note.innerHTML += '<li>Connexion établie.</li>'; //Affecte la connexion à la variable db. db = DBOpenRequest.result; // Exécutez la fonction addData () pour emmagasiné les données dans la base addData(); }; function addData() { // Un nouvel objet prêt à être emmagasiné newItem = [ { taskTitle: "Walk dog", hours: 19, minutes: 30, day: 24, month: "December", year: 2013, notified: "no" } ]; // ouvre une transaction de lecture / écriture prête au traitement des données sur la connexion var transaction = db.transaction(["toDoList"], "readwrite"); // en cas de succès de l'ouverture de la transaction transaction.oncomplete = function(event) { note.innerHTML += '<li>Transaction complété : modification de la base de données terminée.</li>'; }; // en cas d'échec de l'ouverture de la transaction transaction.onerror = function(event) { note.innerHTML += '<li>L\'erreur: "' + transaction.error +'" c\'est produite échec de la transaction.</li>'; }; // ouvre l'accès au un magasin "toDoList" de la transaction var objectStore = transaction.objectStore("toDoList"); // Ajoute un enregistrement var objectStoreRequest = objectStore.add(newItem[0]); objectStoreRequest.onsuccess = function(event) { // signale l'ajout de l'enregistrement note.innerHTML += '<li>Enregistrement ajouté.</li>'; }; // Renvoie le mode dans lequel la transaction a été ouverte ("readwrite" dans ce cas) transaction.mode; };
Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).
Spécification
Spécification | Statut | Commentaire |
---|---|---|
Indexed Database API La définition de 'mode' dans cette spécification. |
Recommendation |
Compatibilité avec les navigateurs
Fontionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Support basique | 23webkit 24 |
10 moz 16.0 (16.0) |
10, en partie | 15 | 7.1 |
Disponible dans workers | (Oui) | 37.0 (37.0) | ? | (Oui) | ? |
Fonctionnalité | Android | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support basique | 4.4 | 22.0 (22.0) | 1.0.1 | 10 | 22 | 8 |
Disponible dans workers | (Oui) | 37.0 (37.0) | (Oui) | ? | (Oui) | ? |