跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

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

介绍浏览器内置数据库 IndexedDB,对比 localStorage 说明其优势。详细解析数据库、对象存储、索引、事务、游标等核心概念,并通过联系人管理器示例演示初始化、增删改查及高级查询操作。内容涵盖最佳实践与浏览器兼容性分析,适用于构建离线 Web 应用及复杂数据处理场景。

CryptoLab发布于 2026/4/6更新于 2026/5/2325 浏览

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

引言:为什么需要前端数据库?

在现代 Web 开发中,我们经常需要处理大量结构化数据。传统的 localStorage 和 sessionStorage 虽然简单易用,但只能存储少量字符串数据,无法满足复杂应用的需求。IndexedDB 应运而生——这是一个功能强大的浏览器内置数据库,支持存储大量结构化数据,提供索引、事务等高级功能,是实现离线应用、缓存机制和复杂数据处理的理想选择。

IndexedDB 核心概念解析

1. 数据库(Database)

  • 每个源(协议 + 域名 + 端口)可以创建多个数据库
  • 每个数据库包含多个对象存储(类似于 SQL 中的表)

2. 对象存储(Object Store)

  • 存储键值对集合的主要容器
  • 键可以是路径、自增数字或自定义键生成器
  • 值可以是任何结构化可克隆对象

3. 索引(Index)

  • 允许高效查询对象存储中的数据
  • 可以基于对象属性创建多个索引
  • 支持唯一索引约束

4. 事务(Transaction)

  • 所有操作都在事务中执行
  • 三种模式:只读(readonly)、读写(readwrite)和版本变更(versionchange)
  • 提供原子性保证(全部成功或全部失败)

5. 游标(Cursor)

  • 用于遍历对象存储或索引中的记录
  • 支持方向控制(前进/后退)和范围查询

完整代码示例:实现一个联系人管理器

1. 初始化数据库

// 打开或创建数据库
const dbName = 'ContactDB';
const dbVersion = 1;
const request = indexedDB.open(dbName, dbVersion);

request.onerror = (event) => {
  console.error('数据库打开失败:', event.target.error);
};

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  // 创建对象存储(如果不存在)
  if (!db.objectStoreNames.contains('contacts')) {
    const store = db.createObjectStore('contacts', {
      keyPath: 'id',
      autoIncrement: true
    });
    // 创建索引
    store.createIndex('name', 'name', { unique: false });
    store.createIndex('email', 'email', { unique: true });
    store.createIndex('phone', 'phone', { unique: false });
    store.createIndex('group', 'group', { unique: false });
  }
};

request.onsuccess = (event) => {
  const db = event.target.result;
  console.log('数据库成功打开');
  // 存储数据库引用供后续使用
  window.contactDB = db;
};

2. 添加联系人

function addContact(contact) {
  return new

目录

  1. 前端数据库 IndexedDB 详解:构建离线 Web 应用
  2. 引言:为什么需要前端数据库?
  3. IndexedDB 核心概念解析
  4. 1. 数据库(Database)
  5. 2. 对象存储(Object Store)
  6. 3. 索引(Index)
  7. 4. 事务(Transaction)
  8. 5. 游标(Cursor)
  9. 完整代码示例:实现一个联系人管理器
  10. 1. 初始化数据库
  11. 2. 添加联系人
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Neo4j Desktop 安装与使用:本地实例、远程连接及数据导入
  • Python 自动备份脚本:智能增量、多线程加速与压缩优化
  • Claude Code Viewer: Web 端会话管理与日志分析工具
  • 循环神经网络(RNN)与序列数据处理实战
  • 使用 Java 实现简单高效的任务调度框架
  • Codex 核心概念详解:工程级 AI 编程智能体
  • Stable Diffusion WebUI Docker 部署指南
  • Python、PyTorch、CUDA 与显卡版本对应关系速查表
  • 2026 年国家自然科学基金 AI 声明撰写位置指南
  • QGroundControl 跨平台安装指南:Windows、macOS、Linux 与 Android 部署
  • BILIVE 部署与运行常见问题排查指南
  • 前端文件上传处理最佳实践与优化方案
  • Android 性能优化项目实战:一线互联网大厂开发案例合集
  • AI 编程工具对比:Cursor、GitHub Copilot 与 Claude Code
  • AI Agent 开发入门:零基础学习指南
  • LeetCode 滑动窗口算法详解:核心思路与实战案例
  • LLM 代码实现:Qwen 模型下载与调用指南
  • PyWebIO 低代码开发指南:5 个实战案例构建 Python Web 应用
  • 华为 OD C++ 技术面核心考点整理
  • 综合评价模型:层次 - 熵权 - 变异系数 - 博弈组合法 Python 实现

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online