首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >前端数据库 IndexedDB 详解:构建强大的离线Web应用

前端数据库 IndexedDB 详解:构建强大的离线Web应用

原创
作者头像
用户3672714
发布2025-08-19 15:26:23
发布2025-08-19 15:26:23
5600
举报

🌐 IndexedDB 详解:构建强大的离线 Web 应用

一、概述

  • IndexedDB 是浏览器提供的 本地 NoSQL 数据库,用于存储大量结构化数据。
  • 特点
    1. 支持离线存储和持久化
    2. 支持事务,保证数据一致性
    3. 异步操作,避免阻塞 UI
    4. 可存储对象、数组、Blob 等复杂数据
  • 应用场景
    • 离线 Web 应用(PWA)
    • 大量本地数据缓存
    • 前端数据分析和同步

二、IndexedDB 核心概念

概念

说明

数据库(Database)

顶层存储容器,每个数据库有名称和版本号

对象仓库(Object Store)

数据表,存储对象(键值对)

索引(Index)

类似 SQL 的索引,提高查询效率

事务(Transaction)

原子操作单元,支持 readonly 和 readwrite

键(Key)

唯一标识对象的属性,可自动生成


三、创建和打开数据库

代码语言:javascript
复制
const request = indexedDB.open("MyDatabase", 1);request.onupgradeneeded = function(event) {  const db = event.target.result;  // 创建对象仓库  const store = db.createObjectStore("users", { keyPath: "id", autoIncrement: true });  // 创建索引  store.createIndex("name", "name", { unique: false });};request.onsuccess = function(event) {  const db = event.target.result;  console.log("数据库打开成功");};request.onerror = function(event) {  console.error("数据库打开失败:", event.target.errorCode);};php490 Bytes© 菜鸟-创作你的创作

四、增删改查操作

1. 添加数据

代码语言:javascript
复制
const transaction = db.transaction("users", "readwrite");const store = transaction.objectStore("users");store.add({ name: "Alice", age: 25 });php144 Bytes© 菜鸟-创作你的创作

2. 查询数据

代码语言:javascript
复制
const request = store.get(1); // 根据主键查询request.onsuccess = function(event) {  console.log(request.result);};php111 Bytes© 菜鸟-创作你的创作

3. 更新数据

代码语言:javascript
复制
const request = store.put({ id: 1, name: "Alice", age: 26 });php61 Bytes© 菜鸟-创作你的创作

4. 删除数据

代码语言:javascript
复制
store.delete(1); // 删除主键为 1 的数据php31 Bytes© 菜鸟-创作你的创作

5. 遍历数据

代码语言:javascript
复制
store.openCursor().onsuccess = function(event) {  const cursor = event.target.result;  if(cursor) {    console.log(cursor.value);    cursor.continue();  }};php162 Bytes© 菜鸟-创作你的创作

五、事务与错误处理

  • 事务类型
    • "readonly":只读事务
    • "readwrite":可读写事务
  • 事务自动提交:事务完成后自动提交或回滚
  • 错误处理
代码语言:javascript
复制
transaction.onerror = function(event) {  console.error("事务失败:", event.target.error);};php88 Bytes© 菜鸟-创作你的创作

六、离线应用实践

  1. 缓存用户操作数据,待网络恢复再同步到服务器
  2. 配合 Service Worker,实现 PWA 离线访问
  3. 存储大文件,如图片、音频、视频 Blob 数据
代码语言:javascript
复制
// 存储图片const imgTransaction = db.transaction("images", "readwrite");const imgStore = imgTransaction.objectStore("images");imgStore.add({ id: 1, data: blob });php161 Bytes© 菜鸟-创作你的创作

七、实用技巧

  1. 封装 IndexedDB 操作,使用 Promise 提升可读性
  2. 利用索引快速查询,避免全表扫描
  3. 版本管理:升级数据库时,使用 onupgradeneeded 做数据迁移
  4. 性能优化:批量操作建议在一个事务中完成

💡 总结

  • IndexedDB 是前端强大的本地数据库,可实现离线存储和高性能数据管理
  • 核心操作包括 创建数据库、对象仓库、索引、增删改查
  • 配合 事务、索引和 Service Worker,可打造完整的离线 Web 应用

https://www.52runoob.com/archives/5967

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🌐 IndexedDB 详解:构建强大的离线 Web 应用
    • 一、概述
    • 二、IndexedDB 核心概念
    • 三、创建和打开数据库
    • 四、增删改查操作
      • 1. 添加数据
      • 2. 查询数据
      • 3. 更新数据
      • 4. 删除数据
      • 5. 遍历数据
    • 五、事务与错误处理
    • 六、离线应用实践
    • 七、实用技巧
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档