惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
Recorded Future
Recorded Future
The Register - Security
The Register - Security
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Blog — PlanetScale
Blog — PlanetScale
H
Help Net Security
Webroot Blog
Webroot Blog
Help Net Security
Help Net Security
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
Attack and Defense Labs
Attack and Defense Labs
T
Tailwind CSS Blog
J
Java Code Geeks
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Cyberwarzone
Cyberwarzone
小众软件
小众软件
G
Google Developers Blog
SecWiki News
SecWiki News
V
V2EX
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Blog of Author Tim Ferriss
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
S
Security Affairs
AI
AI
S
Securelist
D
Docker
人人都是产品经理
人人都是产品经理
T
Troy Hunt's Blog
罗磊的独立博客
The Hacker News
The Hacker News
阮一峰的网络日志
阮一峰的网络日志
Google DeepMind News
Google DeepMind News
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
P
Proofpoint News Feed
Vercel News
Vercel News
Jina AI
Jina AI

Mengke's blog - Mengke's coding journey

年轻不是健康的免死金牌 深圳工作机会,前端 2025 年终总结 Skill 不是 MCP 的替代品:我理解的渐进式披露与选型原则 独立开发者如何开具发票 香港银行卡开户完整指南(2025年9月最新) 招商银行储蓄卡微信动账提醒恢复方法 再谈 MCP - Model Context Protocol(MCP)详解和开发教程 Get Human-Readable "Time Ago" in TypeScript 以「asset-price-mcp」为例,从 0 开发 MCP Server Model Context Protocol (MCP) 快速开始 DeepSeek + Dify 搭建本地知识库 An elegant solution for implementing optional property types using TypeScript 2024 年终总结 Quickly Create a Fullscreen WebView with Autoplay Support for Testing 以数字开头的 ID 在 querySelector 中的处理 String casing utilities in JavaScript Check if a string is a valid color Simple Event-Emitter/PubSub pattern Find which process is running on a certain port and kill it Markdown Code block's basic and advanced syntaxes Common npm commands to use locally Pnpm aliases How to safely rename a case sensitive file/directory in a git repo? A custom hooks to use an async effect A custom hooks to use local storage state 🤩 Mengke'blog 上线的这一年 🗼 五月底去了一趟日本,记录一下我的游记和攻略 网站性能优化:如何高效预加载大型静态资源 闰年之约 - 2024年2月29日 A collection of some useful websites 2023 年终总结 WebGL 学习笔记(一)基础概念与实践 Android Webview <video> 标签去除默认播放按钮图 📷 纯前端也可以实现「用户无感知录屏」? Getting Spotify token to display now playing track on your website AVP - Web 端特效视频播放器 直接下载网易云音乐中歌曲MP3格式的方法 什么!一个项目给了8个字体包??? flex 布局中 start/end 和 flex-start/flex-end 的区别 深入 Pinia:从代码出发探索 Vue 状态管理的奥秘 Pinia 快速上手指南 Nest.js Typrorm 多对多关系如何创建 Strapi 快速入门 CentOS7 MySQL 数据库安装与卸载 Next.js 上手指南 Vue 数据响应式原理 deno 快速上手 - Hello World 案例 快速上手 Vue3 尝鲜 Vue 3.0 Combination API react-router-dom 路由基础教程 JavaScript 数组扁平化处理的方法总结
IndexedDB 基础入门
Mengke · 2023-08-29 · via Mengke's blog - Mengke's coding journey

IndexedDB

Cookie 的大小通常为4KB;LocalStorage 的大小通常在 2.5MB 到 10MB 之间,且它不提供搜索功能,也不能建立自定义的索引。因此,它们都不适合存储大量的数据。为了填补浏览器在这方面的不足,IndexedDB 应运而生。

IndexedDB 是浏览器提供的本地数据库,它是一个事务型数据库系统,可以通过网页脚本创建和操作。相较于LocalStorage,IndexedDB 更适合存储大量的数据。它具备查找接口和建立索引的功能,而这些是 LocalStorage 所不具备的。与传统的关系型数据库不同,IndexedDB 不支持 SQL 查询语句,更类似于 NoSQL 数据库。

打开数据库

IndexedDB 可以直接打开,如果指定的数据库不存在时会自动新建数据库。

open 方法可以传入两个参数:第一个参数是数据库名称,第二个参数是数据库版本。数据库的版本不传时默认时当前版本,如果数据库不存在自动新建数据库时版本默认为 1

open 方法返回的是一个 IDBRequest 实例。

如果 request 对象成功执行了,结果可以通过 result 属性访问到,并且该 request 对象上会触发 success 事件。

如果操作中有错误发生,一个 error 事件会触发,并且会通过 result 属性抛出一个异常。

如果指定的版本大于当前版本,则会出发 upgradeneeded 事件,当数据库不存在自动创建数据库时也会触发这个事件。

新建“表”

打开或新建数据库后,通过 result 拿到数据库对象,后续的操作我们都在此对象上进行。

通过 createObjectStore 方法可以创建一个 store,也就相当于是表。

通过以上代码,打开数据库,判断 user 数据库是否存在,如果不存在泽新建一个名为 user 的表,并指定主键为 id

主键(key)是默认建立索引的属性。比如,数据记录是 { id: 1, name: '张三' },那么 id 属性可以作为主键。主键也可以指定为下一层对象的属性,比如 { foo: { bar: 'baz' } }foo.bar 也可以指定为主键。

如果数据记录里面没有合适作为主键的属性,那么可以让 IndexedDB 自动生成主键。下面代码中,指定主键为一个递增的整数。

创建索引

可以通过 createIndex 方法创建表索引。

操作数据

使用 IndexedDB,可以轻松地向数据库中添加新的数据。可以通过创建对象存储空间(Object Store)来存储数据,并使用事务来确保数据的完整性和一致性。

上面代码中,写入数据需要新建一个事务。新建时必须指定表格名称和操作模式("只读"或"读写")。新建事务以后,通过 IDBTransaction.objectStore(name) 方法,拿到 IDBObjectStore 对象,再通过表格对象的 add() 方法,向表格写入一条记录。

写入操作是一个异步操作,通过监听连接对象的 success 事件和 error 事件,了解是否写入成功。

如果需要从数据库中删除某些数据,可以使用事务来删除特定的对象或整个对象存储空间。

当需要修改已有的数据时,可以使用事务来更新数据。通过指定要更新的对象存储空间和键值,可以进行数据的修改。

一旦数据存储在数据库中,可以使用查询操作来检索所需的数据。可以根据特定的关键字或范围进行查询,并获取相应的数据结果。

遍历数据

IndexedDB 还提供了遍历数据的功能。可以使用游标(Cursor)来逐个迭代数据库中的数据,并进行相应的操作。

索引

在 IndexedDB 中,可以创建索引来提升数据的查询性能。索引可以根据特定的字段对数据进行排序和过滤,加快数据检索的速度。

(完)