欢迎光临
我们一直在努力

html5事务存储

HTML5 事务存储(IndexedDB)详解

基本概念

IndexedDB 是 HTML5 提供的浏览器内置数据库,用于在客户端存储大量结构化数据,它支持异步操作、事务处理,并允许创建复杂数据模型,适用于离线应用、数据缓存等场景。

特性 描述 异步 API 所有操作基于事件回调,避免阻塞主线程 事务支持 通过事务保证数据操作的原子性(ACID 特性) 大容量存储 理论容量可达数 GB(受浏览器和设备限制) 结构化数据 支持类似 NoSQL 的键值对存储,可定义主键/索引 持久化 数据长期存储,即使浏览器关闭后仍保留

API 结构

IndexedDB 采用分层架构:

Database → Object Store → Record 
组件 说明
Database 数据库实例,包含多个对象仓库(Object Store)
Object Store 类似表或集合,存储键值对数据,可定义索引
Transaction 事务对象,用于封装多个操作(如增删改查)
Cursor 游标对象,用于遍历 Object Store 中的数据

操作步骤

  1. 打开数据库

    const request = indexedDB.open('myDatabase', 1);
  2. 创建对象仓库

    request.onupgradeneeded = (event) => {
      const db = event.target.result;
      db.createObjectStore('users', { keyPath: 'id' });
    };
  3. 数据操作

    const transaction = db.transaction(['users'], 'readwrite');
    const store = transaction.objectStore('users');
    store.add({ id: 1, name: 'Alice' });

  4. 读取数据

    const transaction = db.transaction(['users']);
    const store = transaction.objectStore('users');
    const request = store.get(1);
    request.onsuccess = () => console.log(request.result);
  5. 删除数据

    store.delete(1);
  6. 更新数据

    store.put({ id: 1, name: 'Bob' });

  7. 遍历数据

    const cursor = store.openCursor();
    cursor.onsuccess = (event) => {
      const result = event.target.result;
      if (result) {
        console.log(result.value); // 当前记录
        result.continue(); // 继续遍历
      }
    };

与其他存储对比

特性 IndexedDB localStorage/sessionStorage Cookies
数据容量 无限制(GB 级) 5~10MB 4KB
数据结构 结构化(支持索引) 键值对(字符串) 键值对(字符串)
API 类型 异步 同步 同步
持久化 长期存储 长期存储(localStorage) 长期存储
适用场景 复杂数据、离线应用 简单配置、临时数据 小规模状态保存

常见问题与解答

问题 1:如何选择 IndexedDB 或其他客户端存储?

  • 选 IndexedDB:需存储大量结构化数据(如 JSON)、要求事务一致性、需要索引查询。
  • 选 localStorage:仅需存储少量简单键值对(如用户偏好设置)。
  • 选 Cookies:仅需存储极小数据(如会话标识),且需自动发送到服务器。

问题 2:IndexedDB 的浏览器兼容性如何?

  • 现代浏览器(Chrome, Firefox, Edge, Safari)均支持。
  • IE10+ 部分支持,但存在功能限制。
  • 可通过 Polyfill(如 idb 库)兼容旧浏览器
未经允许不得转载:九八云安全 » html5事务存储