关于H5的存储方式

学过h5或者使用Chrome的开发者多多少少知道关于web的存储方法。介绍一下几种常见的web存储方法:

Local Storage

Local Storage 是用户存储 key/value 对的数据。长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。

同时需要注意几点:

保存类型为 String类型(如果存储int、List、Json则需要转换)、localStorage不能被爬虫抓取到、存储内容多的话会消耗内存空间,会导致页面变卡。

使用方法也十分简单:

保存数据:

localStorage.setItem("key", "value");

获取数据:

 localStorage.getItem("key");

删除数据:

localStorage.removeItem("key");

Session Storage

Session Storage和Local Storage 基本类似,区别在于存在时为临时缓存,退出页面或者退出程序运行则会自动清除。

保存数据:

 sessionStorage.setItem("key", "value");

获取数据:

 sessionStorage.getItem("key");

删除数据:

sessionStorage.removeItem("key");

IndexedDB

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

当然,还有另外一种Web数据库——WebSQL(不建议使用)

如果对IndexedDB没有了解过,可以参考 此处

以下是我个人使用IndexedDB的记录(基于Vue代码):

第一步:抽离封装为单独一个页面,方便管理
新建indexedDB.js、index.vue

第二步:创建数据库
indexedDB.js

let dayTable = "daytable";
let mySql = "daysql";
let version = 1;
const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
// 打开数据库
export const myindexedDB = {
        // 创建仓库和字段
    createOpenDBIndex: function () {
        return new Promise(resolve => {
            var request = indexedDB.open(mySql, version);
              //需要注意的是,onupgradeneeded只会调用一次,当为初始化的时候
            request.onupgradeneeded = function (event) {
                var db = event.target.result;
                //主键
                var objectStore = db.createObjectStore(dayTable, {
                    keyPath: "id"
                });
                // 新增字段  unique为唯一性标识
                objectStore.createIndex("num", "num", { unique: true }); 
               //如果成功返回true
                resolve(true)
            }
            request.onerror = function () {
                //失败返回false
                resolve(false)

            }
        })
    },
}

第三步:封装API
indexedDB.js

let dayTable = "daytable";
let mySql = "daysql";
let version = 1;
const indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB;
// 打开数据库
export const myindexedDB = {
// 创建仓库和字段
   createOpenDBIndex: function () {
        return new Promise(resolve => {
            var request = indexedDB.open(mySql, version);
              //需要注意的是,onupgradeneeded只会调用一次,当为初始化的时候
            request.onupgradeneeded = function (event) {
                var db = event.target.result;
                //主键
                var objectStore = db.createObjectStore(dayTable, {
                    keyPath: "id"
                });
                // 新增字段  unique为唯一性标识
                objectStore.createIndex("num", "num", { unique: true }); 
               //如果成功返回true
                resolve(true)
            }
            request.onerror = function () {
                //失败返回false
                resolve(false)

            }
        })
    },
//打开数据库
    openDB: function () {
        return new Promise(resolve => {
            let opens = indexedDB.open(mySql, version);
            opens.onsuccess = function (event) {
                resolve(event.target.result);
            }
        })
    },
    // 获取数据
    getIndex: async function () {
        let db = await this.openDB();
        let boxs = [];
        return new Promise(resolve => {
            var objectStore = db.transaction(dayTable).objectStore(dayTable).openCursor();
            objectStore.onsuccess = function (event) {
                var cursor = event.target.result;
                if (cursor) {
                    boxs.push(cursor.value);
                    cursor.continue();
                } else {
                    resolve(boxs)
                }
            },
                objectStore.onerror = function () {
                    resolve(false);
                }
        })
    },
    //修改数据
    putIndex: async function (row) {
        let db = await this.openDB();
        var request = db
            .transaction([dayTable], "readwrite")
            .objectStore(dayTable).put(row);

        return new Promise(resolve => {
            request.onsuccess = function () {
                resolve(true)
            }
            request.onerror = function () {
                resolve(false)
            }
        })

    },
    // 删除数据 可以通过传入的id值删除
    deleteIndex: async function (idx) {
        let db = await this.openDB();
        var request = db
            .transaction([dayTable], "readwrite")
            .objectStore(dayTable).delete(idx);
        return new Promise(resolve => {
            request.onsuccess = function () {
                resolve(true)
            }
            request.onerror = function () {
                resolve(false)
            }
        })
    },
    //新增数据
    addIndex: async function (row) {
        let db = await this.openDB();
        var request = db
            .transaction([dayTable], "readwrite")
            .objectStore(dayTable).add(row);
        return new Promise(resolve => {
            request.onsuccess = function () {
                resolve(true)
            }
            request.onerror = function () {
                resolve(false)
            }
        })
    },
}

index.vue

import { myindexedDB } from "src/plugins/indexedDB";
methods:{
domo(){
myindexedDB.getIndex().then(res=>{});
myindexedDB.addIndex(row).then(res=>{});
myindexedDB.putIndex(row).then(res=>{});
myindexedDB.deleteIndex(id).then(res=>{});
  }
}

Cookies

关于Cookies 详见 此处

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值