| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/API/IndexedDB_API/Basic_Terminology | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
Dans cet article, nous verrons les caractristiques fondamentales d'IndexedDB et introduirons certains termes qui permettent de comprendre cette API.
Ces autres articles sur le sujet peuvent galement tre utiles :
IndexedDB permet de stocker des donnes dans le navigateur de faon persistante. En permettant aux applications web d'excuter des requtes sur des donnes de faon complexe quelle que soit la connectivit rseau, elle permet aux applications de fonctionner en ligne et hors ligne. IndexedDB est utile pour stocker un grand volume de donnes (par exemple, le catalogue de livres d'une bibliothque) et pour les applications qui doivent pouvoir fonctionner sans accs internet (par exemple des clients mail, des listes de tches, des blocs-notes).
IndexedDB permet de stocker et de rcuprer des objets qui sont indexs avec une cl . Tous les changements appliqus la base de donnes sont effectus au sein de transactions. Comme la plupart des techniques de stockage web, IndexedDB utilise une rgle d'origine identique. Ainsi, on peut stocker des donnes pour un domaine donn, mais on ne peut pas accder aux donnes d'autres domaines.
Si vous avez l'habitude de travailler avec d'autres types de base de donnes, IndexedDB pourrait vous dconcerter. Voici les caractristiques fondamentales d'IndexedDB qu'il faut garder l'esprit :
Les bases de donnes IndexedDB stockent des paires de cl/valeur
IndexedDB est construit sur un modle de base de donnes transactionnel
Ce modle de transaction s'avre vraiment utile lorsqu'on pense au cas d'usage o une personne a ouvert simultanment deux instances d'une application web dans deux onglets diffrents. Sans oprations transactionnelles, les deux instances pourraient interfrer l'une avec l'autre. Si vous ne connaissez pas le concept de transaction pour les bases de donnes, nous vous conseillons de lire l'article Wikipdia sur les transactions et de poursuivre avec la sous-section transaction de cette page, dans la section Dfinitions.
IndexedDB API utilise des oprations asynchrones la plupart du temps
IndexedDB utilise de nombreuses requtes
onsuccess et onerror sur lesquelles on peut appeler addEventListener() et removeEventListener(). Elles disposent galement de proprits readyState, result, et errorCode qui indiquent le statut de la requte. La proprit result peut reprsenter diffrentes choses selon la faon dont la requte a t gnre (a peut par exemple tre une instance IDBCursor ou encore la cl d'une valeur qu'on vient d'insrer en base de donnes).IndexedDB utilise les vnements du DOM pour notifier de la disponibilit des rsultats
type (pour IndexedDB, celle-ci vaudra le plus souvent "success" ou "error"). Les vnements DOM possdent galement une proprit target qui indique la destination de l'vnement. Dans la plupart des cas, la proprit target d'un vnement sera ici l'objet IDBRequest qui a t gnr comme rsultat d'une opration sur la base de donnes. Les vnements de russite ne bouillonnent pas vers la surface et ne peuvent tre annuls. En revanche, les vnements d'erreur bouillonnent vers la surface et peuvent tre annuls. Cette nuance a son importance, car les vnements d'erreur interrompent toute transaction dont ils faisaient partie, moins qu'ils soient annuls.IndexedDB est oriente objets
Dans un magasin de donnes relationnel traditionnel, on aurait une table qui stocke un ensemble de lignes et des colonnes avec des types, nommes pour les diffrentes donnes. Avec IndexedDB, il faut crer un magasin d'objets pour un type de donnes et y faire persister des objets JavaScript. Chaque magasin d'objet peut avoir un ensemble d'index qui permettent des recherches et des parcours rapides. Si vous ne connaissez pas les systmes de gestion de bases de donnes orientes objet, nous vous invitons lire l'article Wikipdia correspondant.
IndexedDB n'utilise pas le langage SQL
IndexedDB suit la rgle d'origine unique
Cette rgle de scurit qui porte sur IndexedDB empche les applications d'accder aux donnes des autres origines. Ainsi, bien qu'une application ou une page situe sur http://www.example.com/app/ puisse rcuprer des donnes propos de http://www.example.com/dir/, car elles partagent la mme origine ; elle ne peut pas rcuprer des donnes provenant de http://www.example.com:8080/dir/ (le port est diffrent) ou de https://www.example.com/dir/ (le protocole est diffrent), car les origines sont diffrentes.
Note :
Le contenu tiers d'une fentre (par exemple celui d'une <iframe>) peut accder au magasin IndexedDB de l'origine dans laquelle il est embarqu, moins que le navigateur soit paramtr pour ne jamais accepter les cookies tiers (voir le bug 1147821).
IndexedDB est conu pour la plupart des cas d'usage de stockage ct client. Toutefois, cette API n'est pas conue pour rpondre aux scnarios :
Toutes les langues ne trient pas les chanes de caractres dans le mme ordre. Bien qu'une base de donnes IndexedDB ne puisse pas stocker des donnes selon un ordre internationalis, il est toujours possible de trier les donnes aprs les avoir rcupres (voir Intl.Collator).
Cette API n'est pas conue pour la synchronisation avec une base de donnes serveur. Il faudra crire du code en plus pour synchroniser une base client IndexedDB avec une base de donnes sur un serveur.
Cette API ne dispose pas d'un quivalent l'oprateur LIKE prsent en SQL.
De plus, il faut avoir conscience que le navigateur peut se dbarrasser de la base de donnes dans certaines conditions :
Les conditions exactes et les comportements des navigateurs pourront varier avec le temps, mais la philosophie gnrale des diteurs de navigateur est de faire le maximum pour garder les donnes disponibles autant que possible.
Dans cette section, on dfinit et on explique les termes spcifiques l'API IndexedDB.
Un dpt d'informations, gnralement compos d'un ou plusieurs magasins d'objets. Chaque base de donnes doit avoir :
Il identifie la base de donnes pour une origine donne et il reste constant pendant la dure de vie de la base de donnes. Le nom peut tre n'importe quelle chane de caractres (y compris la chane vide).
Lorsqu'une base de donnes est initialement cre, son numro de version est 1 si aucune autre valeur n'est fournie. Chaque base de donnes ne peut avoir qu'une seule version un instant donn.
Une opration cre lorsqu'on ouvre une base de donnes. On peut avoir plusieurs connexions ouvertes pour une mme base de donnes un instant donn.
Un index est un magasin d'objet spcialis dans la recherche d'enregistrements d'un autre magasin d'objets, appel le magasin d'objets rfrenc. L'index est un stockage persistant de cl/valeur o la valeur de l'enregistrement correspond la cl de l'enregistrement dans le magasin d'objets rfrenc. Les enregistrements d'un index sont automatiquement remplis lorsque des enregistrements sont insrs, mis jour ou supprims dans le magasin d'objets rfrenc. Chaque enregistrement d'un index ne peut pointer que vers un seul enregistrement du magasin d'objets rfrenc. En revanche, plusieurs index peuvent rfrencer le mme magasin d'objets. Lorsque le magasin d'objets change, tous les index qui rfrencent ce magasin sont automatiquement mis jour.
Il est aussi possible de rechercher parmi les enregistrements d'un magasin d'objets en utilisant la cl.
Pour en savoir plus sur l'utilisation des index, voir l'article Utiliser IndexedDB. Pour la documentation de rfrence propos des index, voir IDBKeyRange.
Il s'agit du mcanisme avec lequel les donnes sont stockes dans la base de donnes. Le magasin d'objets contient les enregistrements (des paires de cl/valeur) de faon persistante. Les enregistrements d'un magasin d'objets sont tris selon leur cl, dans l'ordre croissant.
Chaque magasin d'objets doit avoir un nom unique au sein d'une base de donnes. Un magasin d'objet peut aussi avoir, optionnellement, un gnrateur de cl et un chemin de cl. Si le magasin d'objets a un chemin de cl, il utilise des cls en ligne et sinon il utilise des cls hors ligne.
Pour la documentation de rfrence sur les magasins d'objets, voir IDBObjectStore.
L'opration grce laquelle on lit ou on crit des donnes en base de donnes. Chaque requte reprsente une opration de lecture ou d'criture.
Un ensemble atomique d'oprations d'accs ou de modification des donnes pour une base de donnes distincte. C'est le mcanisme par lequel on interagit avec les donnes d'une base de donnes. Toute lecture ou modification d'une donne de la base de donnes doit avoir lieu au sein d'une transaction.
Une connexion une base de donnes peut avoir plusieurs transactions actives un moment donn tant que les transactions en critures n'utilisent pas de portes qui se chevauchent. La porte d'une transaction est dfinie sa cration et dtermine quels sont les magasins de donnes avec lesquels elle interagit et ceux qui restent constants le temps de la transaction. Ainsi, si une connexion une base de donnes a dj ouvert une transaction d'criture qui porte sur le magasin d'objets singesVolants, il est possible d'ouvrir une deuxime transaction dont la porte serait les magasins d'objets licornesCentaures et licornesPegases. En ce qui concerne les transactions en lecture, il est possible d'en avoir plusieurs, mme si leurs portes se chevauchent.
Les transactions sont censes avoir une dure de vie courte. Le navigateur pourra donc interrompre une transaction qui dure trop longtemps afin de librer les ressources monopolises par une transaction trop longue. Il est possible d'annuler une transaction, ce qui annule les modifications apportes par le dbut de la transaction. Il n'est mme pas ncessaire d'attendre que la transaction ait dmarr ou soit active pour l'interrompre.
Il existe trois modes de transaction : readwrite, readonly, et versionchange. La seule faon de crer et de supprimer des magasins d'objets et des index consiste utiliser une transaction versionchange. Pour en savoir plus sur les types de transaction, voir l'article de rfrence sur IndexedDB.
Comme tout se produit au sein d'une transaction, il s'agit d'un concept majeur pour IndexedDB. Pour en savoir plus sur les transactions et leurs relations avec les versions, voir la documentation de rfrence pour IDBTransaction.
Lorsqu'une base de donnes est cre, sa version est le nombre entier 1. Une base de donnes a une version un instant donn et ne peut pas exister avec plusieurs versions simultanes. La seule faon de changer sa version consiste l'ouvrir avec une version plus grande que la version courante.
Une cl qui est stocke comme une partie de la valeur stocke. Elle est trouve en utilisant un chemin de cl. Une cl en ligne peut galement tre gnre avec un gnrateur. Une fois la gnration effectue, elle peut alors tre stocke dans la valeur en utilisant le chemin de cl ou tre utilise comme une cl.
Une donne selon laquelle les valeurs stockes sont organises et par laquelle on peut les rcuprer d'un magasin de donnes. Le magasin d'objets peut driver la cl de trois sources : un gnrateur de cl, un chemin de cl, ou une valeur fournie explicitement. Chaque enregistrement contenu dans un magasin d'objets doit avoir une cl qui lui est unique au sein de ce magasin et il n'est donc pas possible d'avoir plusieurs enregistrements avec la mme cl dans un magasin d'objets donn.
Une cl peut avoir l'un des types suivants :
Il est aussi possible d'accder aux enregistrements d'un magasin d'objets en utilisant les index.
Un mcanisme qui permet de produire de nouvelles cls de faon ordonne. Si un magasin d'objets ne possde pas de gnrateur de cl, l'application doit alors fournir des cls pour les enregistrements qui sont stocks. Les gnrateurs ne sont pas partags entre les magasins d'objets. Il s'agit ici plutt d'un dtail qui relve de l'implmentation des navigateurs, en pratique, on n'a pas rellement besoin de crer ou d'accder des gnrateurs de cl.
Il dfinit l'emplacement auquel le navigateur devrait extraire la cl du magasin d'objets ou de l'index. Un chemin de cl valide peut inclure un des lments suivants :
Un chemin de cl ne peut pas contenir d'espaces.
Une cl qui est stocke sparment de la valeur enregistre.
Chaque enregistrement a une valeur. Il peut s'agir de n'importe quelle valeur qui peut tre exprime en JavaScript :
undefined,null.Lorsqu'un objet ou un tableau est enregistr, les proprits et valeurs de cet objet ou de ce tableau peuvent galement tre n'importe quelle valeur valide.
Il est aussi possible de stocker des blobs et des fichiers (voir la spcification).
Un mcanisme qui permet d'itrer sur plusieurs enregistrements situs sur un intervalle de cls. Le curseur a une source qui indique l'index ou le magasin qu'il parcourt. Il a aussi une position au sein de l'intervalle et il se dplace dans une direction croissante ou dcroissante de l'ordre des cls des enregistrements.
Pour la documentation de rfrence sur les curseurs, voir IDBCursor.
Un intervalle continu sur un type de donnes utilis pour les cls. Les enregistrements peuvent tre rcuprs d'un magasin d'objets ou d'un index grce des cls ou grce des intervalles de cls. Il est possible de limiter ou de filtrer l'intervalle en utilisant des bornes infrieures et suprieures. Ainsi, on pourra parcourir l'ensemble des valeurs dont la cl est comprise entre x et y.
Pour la documentation de rfrence sur les intervalles de cls, voir IDBKeyRange.
L'ensemble de magasins d'objets et d'index sur lequel une transaction s'applique. Pour les transactions en lecture seule, il peut y avoir un chevauchement des portes lors de leur excution. En revanche, les portes des transactions en criture ne peuvent pas se chevaucher. Il est toujours possible de dmarrer plusieurs transactions qui concernent la mme porte au mme moment, mais celles-ci s'empileront et seront excutes l'une aprs l'autre.
En comprenant les caractristiques fondamentales d'IndexedDB et les termes qui lui sont associs, nous pouvons dsormais aborder des sujets plus concrets. Pour un tutoriel qui explique comment utiliser l'API, voir l'article Utiliser IndexedDB.
Cette page a t modifie le 7 sept. 2025 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |