背景

最近项目中基于需求限制需要使用mineMap地图绘制路段,路段数据有3万+条(大概27.6M),前后端请求一次耗时38s,这么长的基础数据请求时间对任何一个项目来说都是无法接受的。基于此前后端做了以下操作以期解决这个问题:

  1. 后端清除不需要的返回字段,处理后数据大小降至18.6M,请求时间缩短至28s
  2. 前端寻求浏览器存储大量数据的方案只在第一次打开页面时请求,后续均从浏览器存储中获取数据(indexDB)
  3. 路段数据由基础路段和虚拟路段组成,虚拟路段可能会变化,沟通此处需求是否可以变更为只渲染不变的基础路段数据,这样方案可以变更为前端项目里直接请求本地json文件即可,不再需要请求后端

虽然最后不再采用indexDB存储,但是还是记录下vue中使用indexDB的相关代码

indexDB

IndexedDB 是一种底层 API,用于在客户端存储大量的结构化数据(也包括文件/二进制大型对象(blobs))。该 API 使用索引实现对数据的高性能搜索。虽然 Web Storage 在存储较少量的数据很有用,但对于存储更大量的结构化数据来说力不从心。而 IndexedDB 提供了这种场景的解决方案。

indexDB操作步骤如下:

  • 打开/创建数据库(如果没有就会创建)。
  • 首次创建则在数据库中创建一个对象仓库(也就是建一个表)。
  • 数据库操作(增删改查等)

代码如下

全局定义几个变量:

let indexDB
let db
let objectStore

数据库操作(created里):

        const that this        // 创建indexDB内存数据库,存储基础路段数据indexDB = window.indexedDB.open('sectionsData')// 数据库首次创建版本,或者window.indexedDB.open传递的新版本(版本数值要比现在的高)indexDB.onupgradeneeded = function (event) {db = event.target.resultif (!db.objectStoreNames.contains('sections')) {objectStore = db.createObjectStore('sections', { keyPath: 'sectionCode' })//        定义主键,相当于idobjectStore.createIndex('sectionCode', 'sectionCode', { unique: true })objectStore.createIndex('flow', 'flow', { unique: false })objectStore.createIndex('trafficStatus', 'trafficStatus', { unique: false })objectStore.createIndex('coordinates', 'coordinates', { unique: false })}}// 数据库成功打开indexDB.onsuccess = function (event) {//获取db容器db = indexDB.result//判断是否有值--objectStore数据存储仓库(表)objectStore = db.transaction('sections', 'readwrite').objectStore('sections')//此处根据里面是否有sectionCode=0的数据来判断是否已存储路段数据let request = objectStore.get(0)request.onsuccess = function (event) {if (request.result) {let allRecords = objectStore.getAll()allRecords.onsuccess = function () {//拿到所有路段数据,进行需要的操作console.log(allRecords.result)}} else {//如果表中无数据则走接口请求逻辑getRoadData().then(res => {const data = res.datadata.forEach((item, index) => {//数据入表that.add({sectionCode: item.sectionCode,flow: item.flow || 1000,trafficStatus: item.trafficStatus || 1,coordinates: JSON.stringify(coordinates)})})that.add({ sectionCode: 0 })})}}}

add方法:

add(item) {const objectStore = db.transaction(['sections'], 'readwrite').objectStore('sections')objectStore.add(item)},

VUE+前端数据存储indexDB相关推荐

  1. 前端战五渣学JavaScript——前端数据存储

    说起前端数据存储,那就不得不提到Cookie.sessionStorage和localStorage,这是我们接触到的最熟悉的前端数据存储的单词,作为一个前端开发.前端工程师,这三个单词用没用过先不管 ...

  2. vue 前端本地存储搜索历史记录,删除某条记录,清空记录

    vue 前端本地保存搜索历史,localStorage 一.保存历史的数组是由元素组成: [ "000004 SZ"] 在页面第一次加载的时候,从localStorage中获取历史 ...

  3. Web前端数据存储—cookie机制(设置,获取,删除cookie)

    今天看到cookie机制就来记录一下,我们前端一般存储cookie都是在登录的时候进行的,两种,选一个就行(其实都一样,只不过一个明细化了). 我们先了解一下 cookie: HTTPCookie,通 ...

  4. 几种前端数据存储方式(记录)

    1. cookie cookie生成cookie是存在客户端,session存在服务器端.在cookie当用户第一次访问网页时,服务器会给客户端返回一个cookie,在cookie中保存着服务器端se ...

  5. Vue 前端数据大屏 适配

    逻辑分析: 采用了css3的缩放transform: scale(X)属性,我们不难发现本人改变分辨率时,scale的值是变化的.前端小伙们们看到这,想必也已经明白了大概. 我们只要监听浏览器窗口大的 ...

  6. jq选择器 常用方法总结 data数据存储

    dom选择器$符号起步参数形式如css即可 进一步选择元素相关方法: .get()    在你选取的标签之中获取指定的那个索引选取或者属性选取 并且该元素是原生dom 数组形式,故无法实现链式调用 . ...

  7. 魔方APP项目-07-客户端提交登录信息、在APICloud中集成防水墙验证码,前端获取显示并校验验证码、服务端校验验证码、保存用户登录状态,APICloud提供的数据存储、客户端保存用户登陆数据

    用户登录 一.客户端提交登录信息 html/login.html,代码: <!DOCTYPE html> <html> <head><title>登录& ...

  8. vue项目持久化存储数据的实现代码

    方式一.使用localStorage在数据存储 1.要在浏览器刷新的时候重新存储起来 if (window.localStorage.getItem(authToken)) { store.commi ...

  9. 前端图片有时候能显示有时候不显示_web前端基础教程:两种数据存储思路

    Web前端开发基础,Web前端基础教程 数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息.数据以某种格式记录在计算机内部或外部存储介质上.数据存储要命名,这种命名要反映信息特征的组 ...

最新文章

  1. java下输出中文的一点研究
  2. C# redis 分布式session存储
  3. Moodle: 如何修改moodle——theme主题皮肤
  4. Kotlin学习笔记24 协程part4 协程的取消与超时
  5. 堆排序算法java左程云_堆排序算法以及JAVA实现
  6. 发行版,distutils,setuptools和distutils2之间的区别?
  7. Rust语言学习大纲
  8. ie浏览器跳不出下一个页面怎么回事_用户现在可以在微软Edge Chromium中启动IE模式访问传统老旧网站...
  9. Java base64位文件互转
  10. 在Kali Linux上安装LOIC
  11. Vue 项目更新,浏览器不需强制刷新就可更新版本! 防止缓存
  12. 嵌入式和单片机的区别是什么
  13. am相干解调matlab文档,AM调制与相干解调
  14. gc buffer busy acquire 、gc buffer busy release
  15. 专访OKEX Jay Hao:期权市场的需求从何而来?
  16. bzoj1062: [NOI2008]糖果雨
  17. 个性和共性,对共性的封装。新的语言是如何诞生的
  18. python+selenium爬虫搜索今日头条文章并爬取文章相关数据(点赞、评论等)
  19. C# 创建命名管道服务器
  20. 华为手机忘记密码如何解开,有什么相关教程吗

热门文章

  1. 网卡驱动如何设置组播MAC地址
  2. Android 判断当前设备是手机还是平板的最有效的方法
  3. 做程序猿8个月的感受(一)~
  4. 数值计算方法与c语言工程函数库 pdf,数值计算方法与C语言工程函数库
  5. Qt编写控件属性设计器5-属性中文
  6. 做java开发入职半年。对未来很迷茫,该如何发展?
  7. Python和Java应该如何选择?该怎么学?
  8. 人工智能领域单词其英文解释
  9. 魔兽世界8.0服务器不稳定老掉线,win7系统玩魔兽世界频繁掉线的原因及解决方法...
  10. ubuntu selenium爬虫部署