Maison > interface Web > js tutoriel > le corps du texte

Comment utiliser IndexedDB ? Guide sur les opérations CRUD complètes

Barbara Streisand
Libérer: 2024-11-21 12:48:15
original
312 Les gens l'ont consulté

How to use IndexedDB? Guide on complete CRUD Operations

Un guide complet d'IndexedDB : la centrale du navigateur pour le stockage côté client

À mesure que les applications Web deviennent plus sophistiquées, le besoin de solutions de stockage efficaces côté client s'est accru. IndexedDB, une API de bas niveau permettant de stocker de grandes quantités de données structurées, est un outil puissant pour les développeurs Web, les ingénieurs logiciels et les passionnés du Web qui cherchent à créer des applications robustes et compatibles hors ligne.

Dans ce blog, nous explorerons ce qu'est IndexedDB, comment il fonctionne et comment l'utiliser efficacement avec des exemples pratiques. Que vous créiez une Progressive Web App (PWA), un tableau de bord complexe ou un jeu, IndexedDB peut vous aider à gérer les données de manière transparente.


Qu’est-ce qu’IndexedDB ?

IndexedDB est une base de données NoSQL basée sur un navigateur conçue pour stocker de grandes quantités de données structurées, notamment des fichiers et des blobs. Contrairement aux cookies ou à localStorage, IndexedDB vous permet de stocker des données dans un format structuré et de les interroger à l'aide d'index, ce qui le rend idéal pour les cas d'utilisation complexes.

Principales fonctionnalités d'IndexedDB :

  • Opérations asynchrones : les interactions avec IndexedDB sont non bloquantes, garantissant des performances fluides.
  • Stockage de données structurées : stocke les données dans des paires clé-valeur, permettant des requêtes efficaces avec des index.
  • Capacité hors ligne : les données sont stockées localement, ce qui les rend accessibles sans connexion Internet.
  • Grande limite de stockage : offre une plus grande capacité de stockage par rapport aux cookies ou au stockage local.

Cas d'utilisation pour IndexedDB :

  • Progressive Web Apps : stockez des données hors ligne pour des expériences fluides.
  • Stockage de données volumineux : enregistrez des ensembles de données volumineux, tels que les préférences de l'utilisateur ou l'état de l'application.
  • Mise en cache : mettez en cache les réponses de l'API pour des performances améliorées.

Premiers pas avec IndexedDB

Comment fonctionne IndexedDB ?

IndexedDB fonctionne sur une structure de base de données composée de :

  • Bases de données : conteneurs de niveau supérieur pour les données.
  • Magasins d'objets : Tables où les données sont stockées, chacune identifiée par un nom unique.
  • Index : structures qui optimisent les requêtes dans les magasins d'objets.

API IndexedDB : opérations de base

Les principales opérations dans IndexedDB incluent :

  1. Ouverture d'une base de données : création ou accès à une base de données.
  2. Création de magasins d'objets : Définir le stockage de vos données.
  3. Exécution d'opérations CRUD : ajout, lecture, mise à jour et suppression de données.
  4. Utilisation des transactions : gestion atomique des opérations de données.

Exemple 1 : Création et ouverture d'une base de données

Voici comment créer une base de données IndexedDB appelée MyDatabase avec des utilisateurs de magasin d'objets.

const dbName = "MyDatabase";
const dbVersion = 1; // Versioning is required for schema updates.

const request = indexedDB.open(dbName, dbVersion);

request.onupgradeneeded = function (event) {
  const db = event.target.result;

  // Create an object store named 'users' with 'id' as the keyPath
  if (!db.objectStoreNames.contains("users")) {
    db.createObjectStore("users", { keyPath: "id" });
  }
  console.log("Database setup complete");
};

request.onsuccess = function (event) {
  const db = event.target.result;
  console.log("Database opened successfully");
};

request.onerror = function (event) {
  console.error("Error opening database:", event.target.errorCode);
};
Copier après la connexion

Explication :

  • La méthode indexedDB.open ouvre ou crée la base de données.

  • L'événement onupgradeneeded est déclenché lors de la création d'une nouvelle base de données ou de la mise à niveau de sa version.

  • Un magasin d'objets nommé utilisateurs est créé avec l'identifiant comme clé primaire.


Exemple 2 : ajout de données au magasin d'objets

Vous pouvez ajouter des données à un magasin d'objets à l'aide d'une transaction.

function addUser(id, name, email) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const user = { id, name, email };
    const addRequest = objectStore.add(user);

    addRequest.onsuccess = function () {
      console.log("User added:", user);
    };

    addRequest.onerror = function (event) {
      console.error("Error adding user:", event.target.errorCode);
    };
  };
}

// Add a new user
addUser(1, "John Doe", "john.doe@example.com");
Copier après la connexion

Explication :

  • Une transaction est créée avec le mode lecture-écriture pour modifier les données.

  • La méthode add insère des données dans le magasin d'objets des utilisateurs.


Exemple 3 : Lecture de données à partir du magasin d'objets

Récupérez les données en utilisant la méthode get ou parcourez toutes les entrées.

function getUser(id) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readonly");
    const objectStore = transaction.objectStore("users");

    const getRequest = objectStore.get(id);

    getRequest.onsuccess = function () {
      if (getRequest.result) {
        console.log("User found:", getRequest.result);
      } else {
        console.log("User not found");
      }
    };

    getRequest.onerror = function (event) {
      console.error("Error retrieving user:", event.target.errorCode);
    };
  };
}

// Get user with ID 1
getUser(1);
Copier après la connexion

Explication :

  • La méthode get récupère un enregistrement spécifique par sa clé.

  • La récupération des données est asynchrone, des gestionnaires de réussite et d'erreur sont donc utilisés.


Exemple 4 : mise à jour des données dans IndexedDB

Mettre à jour les enregistrements existants à l'aide de la méthode put.

function updateUser(id, updatedData) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const putRequest = objectStore.put({ ...updatedData, id });

    putRequest.onsuccess = function () {
      console.log("User updated:", { ...updatedData, id });
    };

    putRequest.onerror = function (event) {
      console.error("Error updating user:", event.target.errorCode);
    };
  };
}

// Update user with ID 1
updateUser(1, { name: "Johnathan Doe", email: "johnathan.doe@example.com" });
Copier après la connexion

Exemple 5 : suppression de données dans IndexedDB

Supprimez un enregistrement à l'aide de la méthode de suppression.

function deleteUser(id) {
  const request = indexedDB.open("MyDatabase", 1);

  request.onsuccess = function (event) {
    const db = event.target.result;
    const transaction = db.transaction("users", "readwrite");
    const objectStore = transaction.objectStore("users");

    const deleteRequest = objectStore.delete(id);

    deleteRequest.onsuccess = function () {
      console.log("User deleted with ID:", id);
    };

    deleteRequest.onerror = function (event) {
      console.error("Error deleting user:", event.target.errorCode);
    };
  };
}

// Delete user with ID 1
deleteUser(1);
Copier après la connexion

IndexedDB et autres solutions de stockage

Feature IndexedDB localStorage sessionStorage
Storage Limit Several MB to GB 5 MB (approx) 5 MB (approx)
Data Format Key-value pairs Key-value pairs Key-value pairs
Asynchronous Yes No No
Structured Data Yes No No

Meilleures pratiques d'utilisation d'IndexedDB

  • Utilisez correctement les transactions : gérez toujours les opérations de données dans les transactions pour garantir l'atomicité.

  • Gérer les erreurs avec élégance : implémentez des gestionnaires d'erreurs pour un meilleur débogage et des commentaires des utilisateurs.

  • Contrôle de version : incrémentez soigneusement la version de la base de données pour gérer les modifications de schéma.

  • Test des scénarios hors ligne : IndexedDB est souvent utilisé pour les fonctionnalités hors ligne ; assurez-vous qu'il fonctionne comme prévu sans connexion Internet.


Conclusion

IndexedDB est un outil puissant pour le stockage de données côté client, offrant des fonctionnalités qui surpassent de loin les méthodes de stockage traditionnelles comme localStorage. Avec la prise en charge des données structurées, une grande capacité de stockage et des fonctionnalités hors ligne, IndexedDB est une technologie essentielle pour créer des applications Web modernes.

Principaux points à retenir :

  • IndexedDB est idéal pour stocker localement des ensembles de données volumineux et complexes.

  • Les transactions sont essentielles à la gestion des opérations de données dans IndexedDB.

  • Il fournit un support hors ligne robuste, ce qui en fait la pierre angulaire des Progressive Web Apps.

En maîtrisant IndexedDB, vous pouvez créer des applications évolutives et hors ligne avec des performances et une expérience utilisateur supérieures. Commencez dès aujourd’hui à expérimenter IndexedDB dans vos projets !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal