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

StructBERT文本相似度WebUI部署教程:无需conda环境,镜像内含torch28与Flask

StructBERT文本相似度WebUI部署教程:无需conda环境,镜像内含torch28与Flask 1. 项目概述 StructBERT文本相似度计算工具是一个基于百度StructBERT大模型的高精度中文句子相似度计算服务。这个工具可以帮助你快速判断两个中文句子的语义相似程度,相似度得分范围从0到1,数值越接近1表示两个句子的意思越相似。 典型应用场景包括: * 文本查重检测:判断两篇文章或段落是否存在抄袭关系 * 智能问答匹配:将用户问题与知识库中的标准答案进行匹配 * 语义检索优化:理解用户搜索意图,返回更相关的结果 * 内容去重处理:识别和过滤重复或高度相似的文本内容 技术特点: * 基于先进的StructBERT预训练模型 * 提供直观的Web用户界面 * 支持RESTful API接口调用 * 预配置完整运行环境,开箱即用 * 支持批量处理和实时计算 2. 环境准备与快速部署 2.1 系统要求 本镜像已经预配置了完整的运行环境,无需额外安装conda或其他依赖包。系统包含: * Python 3.8+ 运行环境 * PyT

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