亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解Vue中localstorage和sessionstorage的使用

2019-11-19 14:40:04
字體:
來源:轉載
供稿:網友

1. 項目使用中暴露出來的幾個問題

大家到處直接使用localstorage['aaa']='這是一段示例字符串'這些原生語法實現,這樣耦合度太高了,假如有一天我們需要換實現方式,或者對存儲大小做一些控制,那么需要修改的代碼就會很多

項目很大,那么大家起的key的名字難免會重復,而且這樣也會造成全局污染

因為localstorage的使用不規范,所以造成了存儲空間的浪費和不夠用

2. 解決辦法

封裝storage的使用方法,統一處理

規范storage的key值的命名規則
規范storage的使用規范

2.1. 封裝統一的方法

封裝成方法可以降低耦合度,可以方便切換實現方式,可以控制存儲量大小

改變實現可以通過配置不同的參數來實現

編輯如圖所示的項目結構

代碼實現

/* * storage.js *//* * @Author: 石國慶 * @Desc: 本地數據存儲方法封裝 * @Date: 2017.11.14 * @Ref: *  https://github.com/WQTeam/web-storage-cache *  https://developer.mozilla.org/en-US/docs/Web/API/Storage/LocalStorage * @Explain:為了不new對象,只能多寫幾遍 * @Example: * * 1、LocalStorage的使用 * import storage from '@/utils/storage.js' * storage.setItem('shiguoqing0',[1,2,3,4,5,6]) * storage.setItem('shiguoqing1',{userId:'dfdf',token:11232323}) * storage.setItem('shiguoqing2','dfdfdf') * console.log(storage.getItem('shiguoqing0')) * console.log(storage.getItem('shiguoqing1')) * console.log(storage.getItem('shiguoqing2')) * storage.removeItem('shiguoqing2') * * * 2、SessionStorage的使用 * storage.setItem('shiguoqing0',[1,2,3,4,5,6],{type:'session'}) * * */// TODO:其他方法的實現// TODO:超時時間的設置/* * 方法實現 * */import local from './storage/localstorage.js'import session from './storage/session.js'import cookies from './storage/cookies.js'import json from './storage/json.js'/** 函數體* */let storage= { config:{  type:'local',// local,session,cookies,json  expires:new Date().getTime() + 100 * 24 * 60 * 60 * 1000 }, getStorage(options){  let config={}  if(options){   config=Object.assign({},this.config,options)  }else{   config=this.config  }  return this.createStorage(config.type) }, createStorage(name){  switch(name){   case 'local':return local;break   case 'session':return session;break   case 'cookies':return cookies;break   case 'json':return json;break  } }, getItem(key,options){  let store=this.getStorage(options)  return store.getItem(key) }, setItem(key, value,options){  let store=this.getStorage(options)  store.setItem(key,value) }, removeItem(key,options){  let store=this.getStorage(options)  store.removeItem(key) }, getAll(){}, clear(options){  let store=this.getStorage(options)  store.clear() }, key(n){}, lenght(){}, has(key){}, forEach(cb){}, deleteAllExpires(){}, // 獲取最大存儲空間:只有LocalStorage和SessionStorage可以使用這個方法 getMaxSpace(options){  let store=this.getStorage(options)  store.getMaxSpace() }, // 獲取使用了的空間:只有LocalStorage和SessionStorage可以使用這個方法 getUsedSpace(options){  let store=this.getStorage(options)  store.getUsedSpace() }}export default storage// https://segmentfault.com/a/1190000002458488// 5、遍歷localStorage存儲的key//  .length 數據總量,例:localStorage.length//  .key(index) 獲取key,例:var key=localStorage.key(index);// 備注:localStorage存數的數據是不能跨瀏覽器共用的,一個瀏覽器只能讀取各自瀏覽器的數據,儲存空間5M。// 超時設置// function(st, key, value, expires) {//  if (st == 'l') {//   st = window.localStorage;//   expires = expires || 60;//  } else {//   st = window.sessionStorage;//   expires = expires || 5;//  }//  if (typeof value != 'undefined') {//   try {//    return st.setItem(key, JSON.stringify({//     data: value,//     expires: new Date().getTime() + expires * 1000 * 60//    }));//   } catch (e) {}//  } else {//   var result = JSON.parse(st.getItem(key) || '{}');//   if (result && new Date().getTime() < result.expires) {//    return result.data;//   } else {//    st.removeItem(key);//    return null;//   }//  }// }
/* * localstorage.js * localstorage的實現 */// 這個有點奇怪,文件名稱叫local.js不能按照js文件解析export default { getItem(key){  let item = localStorage.getItem(key)  // 這點要判斷是字符串還是對象  let result = /^[{/[].*[}/]]$/g.test(item)  if (result) {   return JSON.parse(item)  } else {   return item  } }, setItem(key, value){  // 這點要判斷是字符串還是對象  if (typeof value == "string") {   localStorage.setItem(key, value)  } else {   let item = JSON.stringify(value)   localStorage.setItem(key, item)  } }, removeItem(key){  localStorage.removeItem(key) }, getAll(){}, clear(){  localStorage.clear() }, key(n){}, forEach(cb){}, has(key){}, deleteAllExpires(){}, // 獲取localstorage最大存儲容量 getMaxSpace(){  if (!window.localStorage) {   console.log('當前瀏覽器不支持localStorage!')  }  var test = '0123456789'  var add = function (num) {   num += num   if (num.length == 10240) {    test = num    return   }   add(num)  }  add(test)  var sum = test  var show = setInterval(function () {   sum += test   try {    window.localStorage.removeItem('test')    window.localStorage.setItem('test', sum)    console.log(sum.length / 1024 + 'KB')   } catch (e) {    console.log(sum.length / 1024 + 'KB超出最大限制')    clearInterval(show)   }  }, 0.1) }, // 獲取使用了的localstorage的空間 getUsedSpace(){  if (!window.localStorage) {   console.log('瀏覽器不支持localStorage')  }  var size = 0  for (item in window.localStorage) {   if (window.localStorage.hasOwnProperty(item)) {    size += window.localStorage.getItem(item).length   }  }  console.log('當前localStorage使用容量為' + (size / 1024).toFixed(2) + 'KB') }}
/* * session.js * sessionstorage的實現 */export default { getItem(key){  let item = sessionStorage.getItem(key)  // 這點要判斷是字符串還是對象  let result = /^[{/[].*[}/]]$/g.test(item)  if (result) {   return JSON.parse(item)  } else {   return item  } }, setItem(key, value){  // 這點要判斷是字符串還是對象  if (typeof value == "string") {   sessionStorage.setItem(key, value)  } else {   let item = JSON.stringify(value)   sessionStorage.setItem(key, item)  } }, removeItem(key){  sessionStorage.removeItem(key) }, getAll(){}, clear(){  sessionStorage.clear() }, key(n){}, forEach(cb){}, has(key){}, deleteAllExpires(){}, // 獲取localstorage最大存儲容量 getMaxSpace(){  if (!window.sessionStorage) {   console.log('當前瀏覽器不支持sessionStorage!')  }  var test = '0123456789'  var add = function (num) {   num += num   if (num.length == 10240) {    test = num    return   }   add(num)  }  add(test)  var sum = test  var show = setInterval(function () {   sum += test   try {    window.sessionStorage.removeItem('test')    window.sessionStorage.setItem('test', sum)    console.log(sum.length / 1024 + 'KB')   } catch (e) {    console.log(sum.length / 1024 + 'KB超出最大限制')    clearInterval(show)   }  }, 0.1) }, // 獲取使用了的localstorage的空間 getUsedSpace(){  if (!window.sessionStorage) {   console.log('瀏覽器不支持sessionStorage')  }  var size = 0  for (item in window.sessionStorage) {   if (window.sessionStorage.hasOwnProperty(item)) {    size += window.sessionStorage.getItem(item).length   }  }  console.log('當前sessionStorage使用容量為' + (size / 1024).toFixed(2) + 'KB') }}
/* * cookies.js * cooikes的實現,這輩子估計沒有時間實現了 */export default { getItem(key){}, setItem(key, value){}, removeItem(key){}, getAll(){}, clear(){}, key(n){}, forEach(cb){}, has(key){}, deleteAllExpires(){}}
/* * json.js * json的實現,這輩子估計也沒有時間實現了 */export default { getItem(key){}, setItem(key, value){}, removeItem(key){}, getAll(){}, clear(){}, key(n){}, forEach(cb){}, has(key){}, deleteAllExpires(){}}

2.2. 規范命名空間的使用

為了防止key值污染,我們可以合理使用命名空間

我們可以定義命名空間,但是不能把很多數據存儲在同一對象里面,這樣后面的操作量會太大

比如全局的在global下面

比如各功能系統的加上系統詞綴

一個系統的命名空間規范應該提前設計好,否則真正開發起來會有很多人不按照規則使用

全局使用的東西要在README.md文檔中體現出來

示例

* localStorage['SGQ.global.userAuthor']:登錄的用戶信息都在這里,菜單,組織,集團* localStorage['SGQ.global.systemName']:登錄的系統名稱* localStorage['SGQ.vuex.state']:vuex中的state的存儲地址,這里面有所有的的東西* localStorage['SGQ.wms.warehouse']:wms需要的倉庫信息+ localStorage['SGQ.wms.warehouse'].permissionId+ localStorage['SGQ.wms.warehouse'].dataResource* localStorage['SGQ.tms.org']:tms需要的網點的信息+ localStorage['SGQ.tms.org'].permissionId+ localStorage['SGQ.tms.org'].orgName

2.3. storage使用規范

2.3.1. 問題產生的原因

這個問題的產生是因為我們要做權限登錄,然后登錄的時候一直報存儲空間不夠的問題,查了原因發現是后端把所有的超管的幾千條數據都返回來了,以至于不夠用,后來修改了后端接口返回的數據內容解決了這個問題。

但是這次的事給我們帶來了幾點思考?

localstorage和sessionstorage的存儲量在不同的瀏覽器中基本是5M

localstorage和sessionstorage的存儲是跟著域名來的

boss.hivescm.com下localstorage存儲是5M

b2b.hivescm.com下localstorage存儲也是5M

即使這次問題解決了,但是我們應該定一套方案,充分利用一個域名下,localstorage和sessionstorage的共10M空間

2.3.2. storage使用方案

全局使用的東西,共享的東西,永久存儲的東西儲存在localstorage中

不需要永久存儲的東西在使用完畢之后要記得及時清除

如果數據量過大就不要存儲在本地了,變為動態獲取

可以使用存儲量更大的Indexeddb,不過有兼容性問題

可以在實現方案中對要存儲到storage中的東西做字數限制

充分合理利用sessionstorage和localstorage的H5特性

例如:列表數據存儲在vuex中其實也會存到localstorage

例如:表單校驗的一些數據都用sessionstorage

3. 其他

3.1. 延伸擴展

由此可以類推到事件的處理,沒用的事件要及時在退出vue組件的時候清理掉

例如:this.bus.$on('aa')要用this.bus.$off('aa')卸載事件

3.2. 字符長短獲取

var len = 0for (var i = 0; i < val.length; i++) { if (val[i].match(/[^/x00-/xff]/ig) != null) //全角  len += 2 //如果是全角,占用兩個字節 如果mysql中某字段是text, 如果設置編碼為utf-8,那么一個中文是占3個字節, gbk是兩個字節 else  len += 1 //半角占用一個字節}return len

以上就是小編整理的關于Vue中localstorage和sessionstorage的用法的全部內容,感謝你對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久久久久三级| 日韩成人免费视频| 久久天天躁狠狠躁夜夜av| 欧美另类极品videosbest最新版本| 日韩av电影国产| 日韩成人中文字幕在线观看| 国产精品美女呻吟| 亚洲自拍偷拍网址| 日韩电影中文 亚洲精品乱码| 丝袜情趣国产精品| 懂色av中文一区二区三区天美| 精品五月天久久| 日韩av不卡在线| 国产成人精品免高潮在线观看| 国产欧美日韩丝袜精品一区| 亚洲精品永久免费精品| 久久精品青青大伊人av| 欧美高跟鞋交xxxxhd| 超碰97人人做人人爱少妇| 亚洲最大激情中文字幕| 欧美视频在线观看 亚洲欧| 91在线国产电影| 国产亚洲激情在线| 亚洲免费视频一区二区| 69**夜色精品国产69乱| 欧美韩日一区二区| 国产一区二区三区在线| 亚洲精品久久久久中文字幕欢迎你| 日韩一区二区福利| 久久精品视频在线| 日韩hd视频在线观看| 久久成年人视频| 狠狠躁夜夜躁人人爽超碰91| 久久久久久免费精品| 久久久国产影院| 精品国产一区二区三区在线观看| 国产成人精彩在线视频九色| 久久久www成人免费精品张筱雨| 麻豆一区二区在线观看| 久久久精品久久久| 欧美成人免费在线视频| www.日韩不卡电影av| 国产成人一区二区| 国产98色在线| 欧美成人在线网站| 国产精品爽爽爽| 97色在线视频观看| 日韩麻豆第一页| 欧美性videos高清精品| 国产精品成人免费视频| 青青草国产精品一区二区| 日韩精品在线影院| 午夜精品免费视频| 欧美黑人极品猛少妇色xxxxx| 久久在精品线影院精品国产| 国产日韩欧美在线播放| 成人在线播放av| 2019中文字幕在线| 国产精品久久电影观看| 97视频在线观看成人| 欧美日韩国产一区二区| 欧美与欧洲交xxxx免费观看| 久久婷婷国产麻豆91天堂| 亚洲性线免费观看视频成熟| 91在线视频免费| 91影视免费在线观看| 久久视频中文字幕| 欧美多人爱爱视频网站| 久久天天躁日日躁| 日韩av在线免播放器| 久久影院中文字幕| 国产在线日韩在线| 国产精品色悠悠| 久久久免费精品| 日韩www在线| 亚洲男人的天堂在线播放| 欧美激情第6页| 精品久久久免费| 亚洲男人天堂视频| 亲子乱一区二区三区电影| 国产精品偷伦一区二区| 国产成人在线精品| 色综合久久中文字幕综合网小说| 日韩欧美极品在线观看| 亚洲精品电影在线| 国产成人精品亚洲精品| 久久久精品网站| 国产精品高潮呻吟久久av黑人| 国产日韩欧美夫妻视频在线观看| 欧美成aaa人片免费看| 国产美女91呻吟求| 成人激情电影一区二区| 欧美综合在线第二页| 亚洲精品国产免费| 色樱桃影院亚洲精品影院| 日韩精品极品毛片系列视频| 97香蕉久久夜色精品国产| 国产亚洲精品美女久久久久| 欧美限制级电影在线观看| 久久久久99精品久久久久| 欧美老女人xx| 不卡av电影院| 亚洲综合在线播放| 亚洲女性裸体视频| 欧美激情视频在线免费观看 欧美视频免费一| 日本一本a高清免费不卡| 久久国产精品免费视频| 国产精品日韩在线一区| 91精品91久久久久久| 久久精品国产亚洲精品2020| 久久韩国免费视频| 成人h片在线播放免费网站| 国产精品色婷婷视频| 美日韩精品视频免费看| 欧美日韩激情美女| 亚洲第五色综合网| 日日狠狠久久偷偷四色综合免费| 成人国产在线视频| 日韩欧美在线免费观看| 国产性猛交xxxx免费看久久| 亚洲free性xxxx护士白浆| 欧美激情三级免费| 日韩免费av一区二区| 久久视频在线观看免费| 欧美日韩国产专区| 国产日韩欧美黄色| 日韩乱码在线视频| 国产剧情久久久久久| 色偷偷9999www| 国语自产偷拍精品视频偷| 国产精品jvid在线观看蜜臀| 国产成人精品免费久久久久| 欧美综合在线第二页| 欧美老女人xx| 日本欧美中文字幕| 欧美大肥婆大肥bbbbb| 国产精品96久久久久久| 国产成人精品在线观看| 一本色道久久88综合日韩精品| 91久久久久久久久久久| 国产mv免费观看入口亚洲| 国内精品伊人久久| 国产精品狠色婷| 亚洲人成网7777777国产| 2019亚洲日韩新视频| 国产一区二区av| 亚洲国产成人精品久久久国产成人一区| 日韩电影在线观看中文字幕| 亚洲精品成人网| 精品久久久久久久久中文字幕| 日韩一区二区三区xxxx| 亚洲欧洲国产一区| 自拍偷拍亚洲区| 久久99国产综合精品女同| 欧美裸体xxxx极品少妇| 精品视频www| 中文字幕久久精品| 亚洲xxxx妇黄裸体| 亚洲福利视频免费观看| 久久久免费观看视频| 精品自在线视频| 日韩国产精品亚洲а∨天堂免| 久久久久久久久综合| 欧美午夜美女看片|