前端数据库 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

3分钟体验macOS Web:无需苹果设备的在线系统模拟器

3分钟体验macOS Web:无需苹果设备的在线系统模拟器 【免费下载链接】macos-web 项目地址: https://gitcode.com/gh_mirrors/ma/macos-web 想要体验macOS的优雅界面却苦于没有苹果设备?macOS Web为你带来了完美的解决方案!这是一个基于现代Web技术构建的开源项目,让你在浏览器中就能感受到macOS Ventura的桌面体验。🎯 项目概览 macOS Web是由开发者PuruVJ创建的创新项目,它使用Svelte框架和Vite构建工具,将macOS的桌面环境完整地呈现在网页上。从菜单栏到Dock栏,从窗口管理到应用程序启动,每一个细节都精心设计,力求还原真实的macOS操作体验。 核心功能详解 完整的桌面环境 项目提供了完整的macOS桌面模拟,包括: * 菜单栏:包含苹果菜单、应用程序菜单和系统状态区域 * Dock栏:可自定义的应用程序启动器 * 窗口系统:支持窗口拖拽、最小化、最大化等操作 * 应用程序:内置多种模拟应用,如计算器、日历、VSCode等 丰富的应用程序 根据src

Axum: Rust 好用的 Web 框架

Axum: Rust 好用的 Web 框架

Axum 是 Rust 生态中基于 Tokio 异步运行时和 Tower 中间件体系打造的高性能 Web 框架,以“类型安全、无宏入侵、轻量高效”为核心优势,广泛应用于云原生、微服务、API 网关等场景。它摒弃了传统 Web 框架的宏魔法,完全依赖 Rust 的类型系统实现路由匹配、请求解析、响应处理,兼顾了开发效率与运行性能。 本文将从环境搭建、核心概念、路由设计、请求处理、中间件开发到生产级实战,全方位拆解 Axum 的使用技巧,每个知识点均配套可运行的示例代码,帮助开发者从入门到精通,快速构建高性能的 Rust Web 应用。 一、环境准备与项目初始化 1.1 前置条件 * 安装 Rust 环境:

Vue3 自定义 v-model 高级用法:从基础到实战,彻底掌握双向绑定

前言 在 Vue 开发中,v-model 是实现表单双向绑定的核心指令,日常开发中我们常用来绑定输入框、单选框等原生表单元素。但在 Vue3 中,v-model 经过全面升级,不仅支持自定义组件的双向绑定,还能实现多绑定值、自定义修饰符、参数化 v-model 等高级特性,是封装高复用性组件(如自定义表单组件、弹窗、滑块等)的必备技能。 本文将从 Vue3 v-model 核心原理讲起,由浅入深讲解基础自定义 v-model、多 v-model 绑定、自定义修饰符、带参数的 v-model 四大高级用法,搭配可直接运行的实战代码,帮你彻底吃透 Vue3 自定义 v-model 的底层逻辑和实战技巧。 一、Vue3 中 v-model 核心原理 首先要明确:Vue3

前端八股文面经大全:腾讯前端AI面试(2026-02-28)·面经深度解析

前端八股文面经大全:腾讯前端AI面试(2026-02-28)·面经深度解析

前言 大家好,我是木斯佳。 在这个春节假期,当大家都在谈论返乡、团圆与休息时,作为一名技术人,我的思考却不由自主地转向了行业的「冬」与「春」。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的潮水退去,留下的才是真正在踏实准备、努力沉淀的人。学习的需求,从未消失,只是变得更加务实和深入。 这个专栏的初衷很简单:拒绝过时的、流水线式的PDF引流贴,专注于收集和整理当下最新、最真实的前端面试资料。我会在每一份面经和八股文的基础上,尝试从面试官的角度去拆解问题背后的逻辑,而不仅仅是提供一份静态的背诵答案。无论你是校招还是社招,目标是中大厂还是新兴团队,只要是真实发生、有价值的面试经历,我都会在这个专栏里为你沉淀下来。 温馨提示:市面上的面经鱼龙混杂,甄别真伪、把握时效,是我们对抗内卷最有效的武器。 让我们一起充电,为下一个技术春天做好准备。 面经原文内容 📍面试公司:腾讯 🕐面试时间: