美文网首页让前端飞程序员
基于indexDB的前端优化缓存方案

基于indexDB的前端优化缓存方案

作者: 打杂coder | 来源:发表于2018-07-09 12:49 被阅读176次

缓存作为一种非常常见的优化手段,不管是前端还是后端都能够经常用到,
后端的缓存方案, 就是redis、memcached这类的
前端的话 可能更多的是http cache 缓存一些静态资源
缓存运用的好是可以大大提升运行速度,提升用户体验的.

H5出来后浏览器多了几种存储方式, 如 localStorage、sessionstorage application cache Web SQL IndexedDB.
目前我们项目最主要用到就是localStorage、indexDB.
localStroage主要用来配合vuex插件来做vuex的持久化,之前写过一篇关于vuex持久化的插件的文章 《关于vuex的持久化》, 有兴趣的可以看下

indexDB用来做一些数据的缓存,为什么要选用indexDB来做缓存而不是选用其他H5的存储方式呢?

  • 持久化限制
    sessionStorage关闭浏览器后就会自动清除掉
    清除浏览器缓存, localStorage会被删除
  • 存储限制
    localStorage 单个domain5M 各个浏览器会有所不同

indexDB支持多种数据格式,持久化存储、支持事务、游标、索引等数据库操作,同时indexDB的存储空间大, 一般浏览器会分配50M-250M不等

现在主要做的项目是关于车辆数据及追踪的SaaS平台,对于indexDB的缓存主要可以用于一些gps数据的缓存、地理位置逆转码的缓存.
拿个最简单的场景来讲:


WX20180709-113532.png

我们从服务端拿过来只有单车的经纬度(latlng), 为了获取到当前的位置,我们一般都会去调用高德的地理位置逆转码通过latlng获取位置,返回如下


WX20180709-114055.png

那我们如果每一次要去获取车辆的位置是否都需要去做一次http请求,要知道减少http请求对于前端优化来说是一个大项,那我们是否能够把这个缓存下来,减少了http请求 读取速度上也会比http请求来的更快


WX20180709-114530.png

这是目前我们项目中对于地理位置的逆转码存储,将latlng作为索引,依次对应address, 在做地理位置逆转码的过程中,先去indexDB里面查询 如果有就直接返回没有的话再调用高德的API. 这样的话 减少了http请求,同时速度也有所提升.

下面说下具体实现:

const $DB = {
    init() {
        let _this = this;
        let req = indexedDB.open("hb_geocode");
        req.onupgradeneeded = e => {
            let db = req.result;
            /* 
              createObjectStore 相当于创建一个表
              "geo" 相当于表名
              keyPath 索引 primary key 
            */
            let obStore = db.createObjectStore("geo", {
                keyPath: "latlng"
            });  

            // 下面这一段相当于创建表的一些数据结构
            obStore.createIndex("address", "address", { unique: false });
            obStore.createIndex("province", "province", { unique: false });
            obStore.createIndex("district", "district", { unique: false });
            obStore.createIndex("street", "street", { unique: false });
            req.result.close();
        };
    },
    /*
       由于indexDB的操作为异步操作,因此用Promise对象进行包装    一下
    */
    Add(payload) {
        return new Promise((resolve, reject) => {
            let db = indexedDB.open("hb_geocode");
          /* 
              
          */
            db.onsuccess = () => {
                db.result
                    .transaction("geo", "readwrite")
                    .objectStore("geo")
                    .add(payload);
                db.result.close();
                resolve();
            };
            db.onerror = e => {
                reject(e);
            };
        });
    },
    Get(key) {
        return new Promise((resolve, reject) => {
            let db = indexedDB.open("hb_geocode");
            db.onsuccess = () => {
                let req = db.result
                    .transaction("geo", "readonly")
                    .objectStore("geo")
                    .get(key);
                db.result.close();

                req.onsuccess = e => {
                    resolve(e.target.result);
                };
                req.onerror = err => {
                    reject(err);
                };
            };
            db.onerror = e => {
                reject(e);
            };
        });
    }
};

以上代码就是我大概封装的一个indexDB的插件
第三方库的话推荐: localForage, 具体我也没用过 好像是有firefox开发和维护的 github star数和issue活跃度都挺不错的,可以考虑试试

相关文章

  • 基于indexDB的前端优化缓存方案

    缓存作为一种非常常见的优化手段,不管是前端还是后端都能够经常用到,后端的缓存方案, 就是redis、memcach...

  • 前端性能优化原理与实践(二)

    摘自前端性能优化原理与实践 从 Cookie 到 Web Storage、IndexDB Cookie Cooki...

  • 前端优化方案--缓存

    一个页面的速度由什么来决定? 资源传输时间(TCP连接时间 + 响应时间) DOM渲染时间 查看方法: windo...

  • 前端优化:api缓存方案

    本文长期更新,如有错误,还望指正!欢迎关注哦 ~ 更新于 2019年6月20日16:04:15 概述 缓存api和...

  • 2020-06-11

    前端性能优化 以可视化为例的一个优化方案 问题: 未优化前网页平均打开时间7-9s(无缓存首次加载),请求资源...

  • PHP高并发解决方案

    高并发解决方案案例 1、流量优化:防盗链处理2、前端优化:减少HTTP请求,启用浏览器缓存和文件压缩,cdn加速,...

  • 浏览器缓存?优点?清除方法?

    ☆前端优化:浏览器缓存技术介绍 - 简书 浏览器缓存(适用于前端解决缓存问题) - 简书 js清除浏览器缓存问题的...

  • 单点登录(cas)、缓存技术与负载均衡

    基于动态缓存的电子商务优化针对电子商务网站的特点和性能要求,在Web服务器前端设置动态缓存服务器,作为Web服务器...

  • 网站优化

    网站优化 前端优化合并js,css,图片等资源,减少http请求次数开启http缓存使用CDN缓存资源和静态页面,...

  • 简单-3前端开发部署方案-续

    大公司里怎样开发和部署前端代码(张云龙) 大公司的静态资源优化方案 配置超长时间的本地缓存 —— 节省带宽,提高性...

网友评论

本文标题:基于indexDB的前端优化缓存方案

本文链接:https://www.haomeiwen.com/subject/trezuftx.html