前端存储数据时浏览器缓存不够用的解决办法

通常我们使用的浏览器缓存是这三种 cookielocalStorage、sessionStorage 最大的存储量只有5M。当项目缓存的东西比如:要素过多时根本不够用,所以考虑使用浏览器数据库 indexDB,大小由你的电脑存储盘决定。百度了一下感觉还挺复杂,其实很简单,存和取,完事。
废话不多说献上效果图:

1、使用必备的 一段代码奉上,封装一下indexDB,是为了更好的调用取,存,这段代码可以不用懂

要学会用就可以了。

取: INDEXDB.getItem('id', (res) => { console.log(res);  })

//id是存的键值,跟 localStorage.getItem(key);中的 key 一样。取也是用 key取,对应效果图中的 key列

//取 ,中的id 为什么第二个参数是匿名回调函数,是因为,取值是异步的,直接取当时不一定返回数据,所以需要用回调函数接一下,当数据确定取到后执行回调函数内的逻辑。

存:INDEXDB.setItem('id', 'insertData');

//存,第二个参数是存的值,该值可以为任意类型,数组对象都可以。对应效果图中 的value 列。

//========================================================== 浏览器    indexDB 使用 Stsrt=========

// * 先定义数据库数据
var Salt = {
    name: 'database',
    version: 6,//数据库的版本号,随便写死的一个常量,避免后续数据库升级,我们用的简单就是存一些数据。
    db: null,
    table: 'Indexdatabase'
}
// * 存储数据
// INDEXDB.setItem('id', 'insertData');
// * 取出数据
// INDEXDB.getItem('id', (res) => {
//     console.log(res);
// })
// * 删除数据
// INDEXDB.deleteItem('id');
// * 修改数据
// INDEXDB.putItem('id', 'newData')
var allEleData="";
var INDEXDB = {
    openDB(name, version, table, callback) {
        //当用户强制清空浏览器缓存时,同时删除数据库,因为数据库数据积累太多会导致查询速度变慢。也需要定期清理
        var isHasallEleData=localStorage.getItem("isHasdatabase");
        if(isHasallEleData===null){
            window.indexedDB.deleteDatabase(name);
        }
        var request = window.indexedDB.open(name, version);
        localStorage.setItem("isHasdatabase",1);
        request.onerror = function (e) {
            console.log(e.currentTarget.error.message);
        };
        request.onsuccess = function (e) {
            Salt.db = e.target.result;
            if (callback && (typeof callback === 'function')) {
                callback(Salt.db)
            }
        };
        // * 第一次打开该数据库,或者数据库版本发生变化
        request.onupgradeneeded = function (e) {
            var db = e.target.result;
            if (!db.objectStoreNames.contains(table)) {
                db.createObjectStore(table, {
                    keyPath: "id"
                });
            }
        };
    },
    setItem(key, val) {
        INDEXDB.openDB(Salt.name, Salt.version, Salt.table, function () {
            try {
                var addData = [{
                    id: key,
                    value: val
                }]
                var transaction = Salt.db.transaction(Salt.table, 'readwrite');
                var store = transaction.objectStore(Salt.table);
                for (var i = 0; i < addData.length; i++) {
                    store.add(addData[i]);
                }
                INDEXDB.closeDB()
            } catch (error) {
                console.log(error);
            }
        });
    },
    getItem: function (val, back) {
        INDEXDB.openDB(Salt.name, Salt.version, Salt.table, function () {
            var transaction = Salt.db.transaction(Salt.table, 'readwrite');
            var store = transaction.objectStore(Salt.table);
            var request = store.get(val);
            request.onsuccess = function (e) {
                if (back && (typeof back === 'function')) {
                    if (e.target.result) {
                        back(e.target.result.value)
                    } else {
                        back('')
                    }
                    INDEXDB.closeDB()
                }

            }
        })
    },
    getAllItem: function (back) {
        INDEXDB.openDB(Salt.name, Salt.version, Salt.table, function () {
            var transaction = Salt.db.transaction(Salt.table, 'readwrite');
            var store = transaction.objectStore(Salt.table);
            var request = store.openCursor();
            request.onsuccess = function (e) {
                if (back && (typeof back === 'function')) {
                    if (e.target.result) {
                        back(e.target.result)
                    } else {
                        back('')
                    }
                    INDEXDB.closeDB()
                }
            }
        })
    },
    putItem(key, value) {
        INDEXDB.openDB(Salt.name, Salt.version, Salt.table, function () {
            var transaction = Salt.db.transaction(Salt.table, 'readwrite');
            var store = transaction.objectStore(Salt.table);
            var request = store.get(key);
            request.onsuccess = function (e) {
                try {
                    var resultData = e.target.result;
                    resultData.value = value;
                    var resultInfo = store.put(resultData);
                    resultInfo.onsuccess = function (e) {
                        if (e.type == 'success') {
                            INDEXDB.closeDB()
                        }
                    }
                } catch (error) {
                    INDEXDB.setItem(key, value)
                }
            };
        })

    },
    deleteItem(key) {
        INDEXDB.openDB(Salt.name, Salt.version, Salt.table, function () {
            var transaction = Salt.db.transaction(Salt.table, 'readwrite');
            var store = transaction.objectStore(Salt.table);
            var result = store.delete(key);
            result.onsuccess = function (e) {
                if (e.type == 'success') {
                    INDEXDB.closeDB()
                }
            }
        })
    },
    closeDB() {
        Salt.db.close();
    },
}
// * 初始化数据库
INDEXDB.openDB(Salt.name, Salt.version, Salt.table);

//========================================================== 浏览器    indexDB 使用 End===========

//结束了,就是这么简单


                
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 浏览器缓存前端开发中常用的优化技术,它可以大大提高网页加载速度和降低服务器压力。 浏览器缓存的工作原理是将网页的静态资源,如图片、CSS、JavaScript等文件存储在浏览器本地,下次访问该网页可以直接从本地缓存中读取,而不用再向服务器请求,从而大大减少了网络请求间。 使用浏览器缓存需要在服务器端配置缓存控制,告诉浏览器该资源可以缓存多长间。这通常是通过设置 HTTP 头部的 Expires 和 Cache-Control 字段来实现的。 注意,浏览器缓存并不适用于所有情况,特别是当网页的内容需要经常更新,就不适合使用浏览器缓存。此,应该在服务器端配置为不缓存,以保证用户每次都获取到最新的内容。 总之,浏览器缓存前端开发中一个很有用的优化技巧,它可以提高网页加载速度并降低服务器压力,但也需要根据实际情况进行适当的使用。 ### 回答2: 浏览器缓存前端开发中一个常见但又容易被忽视的重要概念。它可以显著提高网站的加载速度和用户体验。本文将向大家介绍浏览器缓存的基本原理、常见问题以及前端开发中常用的缓存控制方法。 首先,浏览器缓存是一种将已经下载过的资源保存在客户端的技术。当用户再次访问网站,浏览器可以直接从本地缓存中加载资源,而无需重新下载,从而提高了网站的加载速度。浏览器缓存可以分为两种类型:强缓存和协商缓存。 强缓存是通过设置响应头中的Expires或Cache-Control字段来实现的。Expires字段指定了资源的过期间,Cache-Control字段可以设置资源在浏览器缓存存储间。当浏览器访问该资源,在过期间内,浏览器直接从缓存中加载资源,而不会发送请求到服务器。 协商缓存是通过设置响应头中的Last-Modified和ETag字段来实现的。Last-Modified表示资源的最后修改间,ETag是资源的唯一标识符。当浏览器再次请求该资源,会发送If-Modified-Since和If-None-Match字段,服务器会根据这些字段判断资源是否有更新。如果资源未被修改,服务器返回304状态码,浏览器直接从缓存中加载资源,否则服务器返回新的资源。 在前端开发中,我们可以通过使用版本号或者哈希值的方式来解决缓存问题。每当修改了资源文件,我们可以将资源的链接中加入一个版本号或者哈希值,这样就可以保证每次资源文件发生变化后,链接的变化能够告知浏览器重新下载资源。另外,我们还可以使用工具或者服务器配置来对静态资源进行缓存控制,如使用Webpack的hash命名方式生成文件名,或者在Nginx配置文件中设置缓存间。 总之,浏览器缓存是一种能够显著提高网站性能的技术。理解浏览器缓存的原理和机制对于前端开发人员来说是非常重要的。通过合理设置缓存相关的响应头、采用合适的缓存策略以及使用版本号和哈希值等方式,我们可以有效控制和利用浏览器缓存,提高网站的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高彩琼

你的鼓励是我创作得最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值