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

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

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

在现代Web开发中,我们经常需要处理大量结构化数据。传统的localStoragesessionStorage虽然简单易用,但只能存储少量字符串数据,无法满足复杂应用的需求。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. 添加联系人

functionaddContact(contact){ returnnew

Read more

使用 Trae IDE 一键将 Figma 转为前端代码

在现代前端开发中,从设计稿到可用页面的交付往往需要大量重复劳动:切图、手写样式、布局调整……而借助 MCP Server - Figma AI Bridge,我们可以将 Figma 设计稿自动转换成整洁的 HTML/CSS/JS 代码,并立即生成可预览的网页。一键化、傻瓜式操作,让设计交付效率跃升。 本文测试使用的系统环境如下: * Trae IDE 版本:2.4.5 * macOS 版本:14.7 * Node.js 版本:24.6.0 * npx 版本:11.5.2 * Python 版本:3.13.3

C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析

C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 自动化测试前置:明确测试范围与测试用例设计 * 二. 自动化测试脚本开发:Python+Selenium 实现 * 2.1 通用工具类:common/Utils.py * 2.2. 登录模块测试:cases/BlogLogin.py * 2.3. 博客列表与详情页测试:cases/BlogList.py & BlogDetail.py * 2.3.1. 列表页测试(BlogList.py) * 2.3.

Flutter 三方库 webfeed 的鸿蒙化适配指南 - 掌控 RSS/Atom 内容订阅、XML 语义分发实战、鸿蒙级精密聚合专家

Flutter 三方库 webfeed 的鸿蒙化适配指南 - 掌控 RSS/Atom 内容订阅、XML 语义分发实战、鸿蒙级精密聚合专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 webfeed 的鸿蒙化适配指南 - 掌控 RSS/Atom 内容订阅、XML 语义分发实战、鸿蒙级精密聚合专家 在鸿蒙跨平台应用执行高级内容聚合与多维资讯资产指控(如构建一个支持全场景自动发现的鸿蒙阅读器、处理海量 RSS 2.0/Atom 协议的语义认领或是实现一个具备极致指控能力的资产管理快报中控)时,如果依赖繁琐的原始 XML 解析或是不透明的正文提取算法,极易在处理“命名空间(Namespace)冲突导致的字段丢失”、“非标准日期格式的解析崩溃”或“多模式 Feed 协议间的字段映射偏移”时陷入研发逻辑崩溃死循环。如果你追求的是一种完全对齐现代 Web 聚合标准、支持全量语义解析且具备极致指控确定性的方案。今天我们要深度解析的 webfeed——一个专注于解决“分发内容标准化认领”痛点的顶级工具库,正是帮你打造“鸿蒙超感阅读内核”

前端多语言别再硬编码!3步搞定i18n让老外也夸你代码香

前端多语言别再硬编码!3步搞定i18n让老外也夸你代码香

前端多语言别再硬编码!3步搞定i18n让老外也夸你代码香 * 前端多语言别再硬编码!3步搞定i18n让老外也夸你代码香 * 开篇先吐槽:还在用if-else判断语言?Out啦 * 到底啥是i18n,别被缩写吓住 * 选对工具真的能少加班,主流方案大乱斗 * i18next:老牌劲旅,生态丰富到怀疑人生 * vue-i18n:Vue亲儿子,丝滑得像德芙 * react-i18next:React界的扛把子 * formatjs:Google出品,必属精品? * 到底怎么选? * 撸起袖子干:从零搭建多语言架构的骚操作 * 文件目录怎么摆?强迫症患者的终极抉择 * JSON资源文件编写规范:key的命名艺术 * 动态加载语言包:别让首屏慢得像蜗牛 * 检测用户语言的几种姿势 * 切换语言时的"瞬移"问题 * 那些让人头秃的深水区:复数、性别和日期格式化 * 复数地狱:俄语和阿拉伯语教你做人 * 性别相关的文案处理 * 时间和数字