前端使用indexedDB入门
在项目开发地图的过程中,有一个geoJson面图数据过大,希望只有刚进入页面获取一次,存放在浏览器的 IndexedDB 数据库中,再次刷新直接从该数据库中拿取数据,节省页面渲染时间,提升用户体验。
let promise = [this.getDetail()] // 获取区域详情数据
if (this.ifSupportIndexedDB()) { // 浏览器是否支持indexedDB // 初始化数据库 await this.initIndexDB().then(db => { this.db = db // indexDB 数据库对象 }) // 从数据库中读取地图上的面图数据,如果有的话,就不下发请求了 const result = await this.getDataByKey(this.db, 'geoJsonList', 'tlop') if (result) { this.geoJsonList = result.geoJsonList } else { promise.push(this.getGeoJsonList()) // 获取面图数据 } } else { promise.push(this.getGeoJsonList()) // 获取面图数据 } Promise.all(promise).then(() => { console.log('数据获取成功') }) export default { methods: { // 初始化 indexDB 数据库,存储三线一单的面图数据(超过5M 无法存储在 LocalStorage 中,只能存到indexDB 了) initIndexDB() { return new Promise(resolve => { let dbName = 'TLOPDB', version = 1, storeName = 'geoJsonList' let db const request = window.indexedDB.open(dbName, version) // 数据库打开成功 request.onsuccess = (event) => { db = event.target.result // 数据库对象 resolve(db) } // 数据库打开报错 request.onerror = (event) => { } // 数据库创建或升级的时候会触发 request.onupgradeneeded = (event) => { db = event.target.result // 数据库对象 let objectStore if (!db.objectStoreNames.contains(storeName)) { objectStore = db.createObjectStore(storeName, { keyPath: 'id' }) // 创建表 // objectStore.createIndex('name', 'name', { unique: true }) // 创建索引 可以让你搜索任意字段 } } }) }, // 给数据库添加数据: db: 数据库对象 storeName: 仓库名称 data: 要添加的数据 addData(db, storeName, data) { let request = db.transaction([storeName], 'readwrite') // 事务对象 指定表格名称和操作模式("只读"或"读写") .objectStore(storeName) // 仓库对象 .add(data) // 数据写入成功 request.onsuccess = (event) => { } // 数据写入失败 request.onerror = (event) => { throw new Error(event.target.error) } }, // 兼容不同浏览器,判断浏览器是否支持IndexDB ifSupportIndexedDB() { return 'indexedDB' in window } }
}
生活是痛苦的白天,死亡是凉爽的夜晚。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异