返回

IndexedDB 入门手册

前端

简介

IndexedDB 是一个低级的 API,用于在客户端存储数据,即使在浏览器关闭时数据也不会丢失。它使用户能够存储大量的数据,而无需担心数据丢失的风险。IndexedDB 的设计目标是成为一个高性能、可扩展的存储系统,能够满足各种应用程序的需求。

IndexedDB 的基本概念

IndexedDB 使用了一些基本的概念来组织和管理数据。这些概念包括:

  • 数据库 :数据库是 IndexedDB 中存储数据的基本单元。一个数据库可以包含多个对象存储。
  • 对象存储 :对象存储是数据库中的一个容器,用于存储键值对。键是唯一的标识符,而值是可以是任何类型的数据。
  • :键是对象存储中唯一标识一条记录的字段。键可以是字符串、数字或二进制数据。
  • :值是可以存储在对象存储中的任何类型的数据。值可以是字符串、数字、二进制数据、对象或数组。
  • 事务 :事务是一组原子操作,要么全部成功,要么全部失败。事务用于确保数据的一致性。

使用 IndexedDB Promised 库

Jake Archibald 的 IndexedDB Promised 库是一个与 IndexedDB API 非常相似的库,但它使用 Promise 而不是事件。这在简化了 API 的同时又保持了其结构。

以下是如何使用 IndexedDB Promised 库来创建一个数据库:

const db = new idb.openDB('my-database', 1, {
  upgrade(db) {
    const store = db.createObjectStore('my-object-store', { keyPath: 'id' });
  }
});

以下是如何使用 IndexedDB Promised 库来向数据库中添加数据:

db.then(db => {
  const tx = db.transaction('my-object-store', 'readwrite');
  const store = tx.objectStore('my-object-store');
  store.add({ id: '1', name: 'John Doe' });
  return tx.complete;
});

以下是如何使用 IndexedDB Promised 库从数据库中读取数据:

db.then(db => {
  const tx = db.transaction('my-object-store', 'readonly');
  const store = tx.objectStore('my-object-store');
  return store.get('1');
});

以下是如何使用 IndexedDB Promised 库从数据库中删除数据:

db.then(db => {
  const tx = db.transaction('my-object-store', 'readwrite');
  const store = tx.objectStore('my-object-store');
  store.delete('1');
  return tx.complete;
});

结论

IndexedDB 是一个强大的 API,可用于在客户端存储数据。它使用户能够存储大量的数据,而无需担心数据丢失的风险。IndexedDB 的设计目标是成为一个高性能、可扩展的存储系统,能够满足各种应用程序的需求。