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

ctfshowweb入门 SSTI模板注入专题保姆级教程(一)

ctfshowweb入门 SSTI模板注入专题保姆级教程(一)

前言:本来这篇是不打算写的,自己稍微记录一下就行了,但是我发现后面的题难度也挺大的,而且好多更细的不记录后面也容易忘记,并且网上很多师傅讲的直接是payload(我还是太菜了看不懂),有很多都是我没见到过的,因此这里综合记录一下(其实最重要的是在这里写的能保存成pdf)同时也是对自己找的资料进行一个汇总 web361 这里我之前详细讲过了就不再赘述,ctfshowweb361--一道题从0入门SSTI模板注入,这里面也是直接从0基础讲起,如果还是有不懂的网上再找点资料看看【我最后也放了参考】,后续题目都是在这基础上进行的,熟悉了361的方法之后才能继续做后面题目。 web362 按照之前的方法进行尝试,发现过滤了除1和7以外的数字,而我们要找的是132,因此这里可以采用全角符号绕过【具体怎么开问下AI就行,因为我用的是Windows自带的,在设置里面进行设置,然后可能有的人用了其他输入法之类的,所以这里就不上图了】 实在找不到的话我直接打在下面: 1234567890 (全角 可以对比半角:1234567890) 然后就是输入我们的payload: ?name={{

By Ne0inhk
Java Web 网上商城系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

Java Web 网上商城系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着电子商务的快速发展,网上商城系统已成为现代商业活动的重要组成部分。传统的单体架构系统在应对高并发、分布式部署及快速迭代需求时面临诸多挑战,亟需采用更高效、灵活的技术架构进行升级。本论文基于实际需求,设计并实现了一个基于前后端分离架构的Java Web网上商城系统,旨在解决传统系统性能瓶颈、维护成本高等问题。系统采用SpringBoot2、Vue3、MyBatis-Plus和MySQL8.0等技术栈,具备良好的扩展性和可维护性,能够满足中小型电商平台的业务需求。关键词:网上商城、SpringBoot2、Vue3、MyBatis-Plus、MySQL8.0。 本系统采用前后端分离架构,后端基于SpringBoot2框架实现RESTful API,提供高效的数据交互能力;前端使用Vue3框架构建响应式用户界面,提升用户体验;数据库采用MySQL8.0存储业务数据,结合MyBatis-Plus简化数据操作逻辑。系统功能模块包括用户管理、商品管理、订单管理、购物车管理及支付集成等,支持多角色权限控制、商品分类检索、订单状态追踪等功能。通过分布式缓存和异步消息队列优化系统性能,确保高

By Ne0inhk

ComfyUI vs WebUI对比实测:云端GPU 1小时低成本体验

ComfyUI vs WebUI对比实测:云端GPU 1小时低成本体验 对于资深AI图像生成用户来说,选择合适的工具直接关系到生产效率和创作质量。当需要评估ComfyUI工作流与传统WebUI在运行Qwen-Image-2512时的性能差异时,一个独立、可快速启停的临时环境显得尤为重要。本文将带你通过云端GPU资源,在1小时内完成对两种主流界面的全面对比测试,帮助你做出最适合自身生产流程的技术选型。 本次实测聚焦于Qwen-Image-2512这一先进模型——它在人物真实感、自然细节和文本渲染方面均有显著提升,甚至在盲测中超越部分闭源商业模型。我们将从部署效率、操作逻辑、生成质量、资源占用等多个维度进行深度剖析,确保你能获得客观、实用的决策依据。无论你是希望优化现有工作流的专业设计师,还是想探索更高效创作方式的技术爱好者,这篇文章都能为你提供清晰的指引。 1. 环境准备:为什么选择云端GPU进行对比测试 1.1 资深用户的典型困境与解决方案 作为一名资深AI创作者,你可能经常面临这样的挑战:现有的本地设备已经满载运行着多个重要任务,无论是训练模型、渲染视频还是处理大量数据,

By Ne0inhk

解放双手:用自动化工具实现前端国际化自动翻译的终极方案

解放双手:用自动化工具实现前端国际化自动翻译的终极方案 【免费下载链接】auto-i18n-translation-pluginsWeb automatic translation, supports custom translators, default support for Youdao Translation and Google Translate, compatible with webpack, vite, rollup and other build and development tools, support all front-end frameworks compiled into js, allowing you to translate with just one click. 项目地址: https://gitcode.com/gh_mirrors/au/

By Ne0inhk