最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

localstorage實現(xiàn)帶過期時間的緩存功能

 更新時間:2019年06月28日 18:19:53   作者:冬眠的山谷  
這篇文章主要介紹了localstorage實現(xiàn)帶過期時間的緩存功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

前言

一般可以使用cookie,localstorage,sessionStorage來實現(xiàn)瀏覽器端的數(shù)據(jù)緩存,減少對服務(wù)器的請求。

1.cookie數(shù)據(jù)存放在本地硬盤中,只要在過期時間之前,都是有效的,即使重啟瀏覽器。但是會在每次HTTP請求中添加到請求頭中,如果數(shù)據(jù)過多,會造成性能問題。

2.sessionStorage保存在瀏覽器內(nèi)存中,當(dāng)關(guān)閉頁面或者瀏覽器之后,信息丟失。

3.localstorage也是保存在本地硬盤中,除非主動清除,信息是不會消失的。但是實際使用時我們需要對緩存設(shè)置過期時間,本文便是講解如何為localstorage添加過期時間功能。

這三者僅支持同源(host+port)的數(shù)據(jù),不同源的數(shù)據(jù)不能互相訪問到。

localstorage

localstorage支持以下方法

  • 保存數(shù)據(jù):localStorage.setItem(key,value);
  • 讀取數(shù)據(jù):localStorage.getItem(key);
  • 刪除單個數(shù)據(jù):localStorage.removeItem(key);
  • 刪除所有數(shù)據(jù):localStorage.clear();
  • 得到某個索引的key:localStorage.key(index);  

需要注意的是,僅支持String類型數(shù)據(jù)的讀取,如果存放的是數(shù)值類型,讀出來的是字符串類型的,對于存儲對象類型的,需要在保存之前JSON化為String類型。

對于緩存,我們一般有以下方法

set(key,value,expiredTime);
get(key);
remove(key);
expired(key,expiredTime);
clear(); 

實現(xiàn)

設(shè)置緩存

對于過期時間的實現(xiàn),除了用于存放原始值的緩存(key),這里添加了兩個緩存(key+EXPIRED:TIME)和(key+EXPIRED:START:TIME),一個用于存放過期時間,一個用于存放緩存設(shè)置時的時間。

當(dāng)讀取的時候比較 (過期時間+設(shè)置緩存的時間)和當(dāng)前的時間做對比。如果(過期時間+設(shè)置緩存時的時間)大于當(dāng)前的時間,則說明緩存沒過期。

注意這里使用JSON.stringify對存入的對象JSON化。讀取的時候也要轉(zhuǎn)回原始對象。

"key":{
    //輔助
    "expiredTime": "EXPIRED:TIME",
    "expiredStartTime": "EXPIRED:START:TIME",
    //全局使用
    //用戶信息
    "loginUserInfo": "USER:INFO",
    //搜索字段
    "searchString": "SEARCH:STRING",
  },
  /**
   * 設(shè)置緩存
   * @param key
   * @param value
   * @param expiredTimeMS 過期時間,單位ms
   */
  "set":function (key,value,expiredTimeMS) {
    if((expiredTimeMS == 0 ) || (expiredTimeMS == null)){
      localStorage.setItem(key,value);
    }
    else {
      localStorage.setItem(key,JSON.stringify(value));
      localStorage.setItem(key+cache.key.expiredTime,expiredTimeMS);
      localStorage.setItem(key+cache.key.expiredStartTime,new Date().getTime());
    }
  },

 讀取緩存

由于讀取出來的是時間信息是字符串,需要將其轉(zhuǎn)化為數(shù)字再進(jìn)行比較。

/**
   * 獲取鍵
   * @param key
   * @returns {*} key存在,返回對象;不存在,返回null
   */
  "get":function (key) {
    var expiredTimeMS = localStorage.getItem(key+cache.key.expiredTime);
    var expiredStartTime = localStorage.getItem(key+cache.key.expiredStartTime);
    var curTime = new Date().getTime();
    var sum = Number(expiredStartTime) + Number(expiredTimeMS);
    if((sum) > curTime){
      console.log("cache-緩存["+key+"]存在!");
      return JSON.parse(localStorage.getItem(key));
    }
    else {
      console.log("cache-緩存["+key+"]不存在!");
      return null;
    }
  },

移除緩存

移除緩存時需要把三個鍵同時移除。

/**
   * 移除鍵
   * @param key
   */
  "remove":function (key) {
    localStorage.removeItem(key);
    localStorage.removeItem(key+cache.key.expiredTime);
    localStorage.removeItem(key+cache.key.expiredStartTime);
  },

其他代碼

/**
   * 對鍵重新更新過期時間
   * @param key
   * @param expiredTimeMS 過期時間ms
   */
  "expired":function (key,expiredTimeMS) {

    if(cache.get(key)!=null){
      localStorage.setItem(key+cache.key.expiredTime,expiredTimeMS);
    }

  },
  /**
   * 清除所有緩存
   */
  "clear":function () {
    localStorage.clear();
  }

總結(jié)

以上所述是小編給大家介紹的localstorage實現(xiàn)帶過期時間的緩存功能,希望對大家有所幫助如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • JavaScript實現(xiàn)網(wǎng)頁端播放攝像頭實時畫面

    JavaScript實現(xiàn)網(wǎng)頁端播放攝像頭實時畫面

    這篇文章主要介紹了如何利用JavaScript實現(xiàn)在網(wǎng)頁端播放局域網(wǎng)(不能上云)或是廣域網(wǎng)的攝像頭的實時畫面,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • 關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細(xì)位置并計算距離

    關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細(xì)位置并計算距離

    這篇文章主要介紹了關(guān)于微信小程序中使用wx.getLocation獲取當(dāng)前詳細(xì)位置并計算距離,wx.getLocation只能夠獲取經(jīng)緯度,不能夠拿到詳細(xì)地址,這里使用騰訊地圖的api,需要的朋友可以參考下
    2023-04-04
  • layui 監(jiān)聽表格復(fù)選框選中值的方法

    layui 監(jiān)聽表格復(fù)選框選中值的方法

    今天小編就為大家分享一篇layui 監(jiān)聽表格復(fù)選框選中值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 瀏覽器加載、渲染和解析過程黑箱簡析

    瀏覽器加載、渲染和解析過程黑箱簡析

    瀏覽器加載、渲染和解析過程的黑箱分析,對于渲染,利用 Fiddler 將網(wǎng)速調(diào)慢,可以看到 css 下載后會馬上渲染到頁面,渲染和下載同步進(jìn)行,需要的朋友可以參考下
    2012-11-11
  • JavaScript中使用參數(shù)個數(shù)實現(xiàn)重載功能

    JavaScript中使用參數(shù)個數(shù)實現(xiàn)重載功能

    這篇文章主要介紹了JavaScript中使用參數(shù)個數(shù)實現(xiàn)重載功能,需要的朋友可以參考下
    2017-09-09
  • 深入理解javascript原型鏈和繼承

    深入理解javascript原型鏈和繼承

    這篇文章主要介紹了javascript原型鏈和繼承的概念,以及使用原型鏈實現(xiàn)繼承、經(jīng)典繼承、組合式繼承、寄生組合式繼承。非常實用,是篇非常不錯的文章,這里推薦給大家。
    2014-09-09
  • javascript代碼優(yōu)化的8點總結(jié)

    javascript代碼優(yōu)化的8點總結(jié)

    本篇文章給大家分享了關(guān)于javascript代碼優(yōu)化的8點總結(jié),希望我們整理的內(nèi)容能夠幫助到大家。
    2018-01-01
  • 微信小程序拼接圖片鏈接無底洞深入探究

    微信小程序拼接圖片鏈接無底洞深入探究

    這篇文章主要給大家介紹了關(guān)于微信小程序拼接圖片鏈接無底洞深入探究的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回

    ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回

    AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù),通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實現(xiàn)異步更新,本篇文章給大家介紹ajax如何實現(xiàn)頁面局部跳轉(zhuǎn)與結(jié)果返回,感興趣的朋友一起來學(xué)習(xí)
    2015-08-08
  • 如何用JS判斷數(shù)組中是否存在某個值或者某個對象的值

    如何用JS判斷數(shù)組中是否存在某個值或者某個對象的值

    數(shù)組是我們編程中經(jīng)常使用的的數(shù)據(jù)結(jié)構(gòu)之一,在處理數(shù)組時,我們經(jīng)常需要在數(shù)組中查找特定的值,下面這篇文章主要給大家介紹了關(guān)于如何用JS判斷數(shù)組中是否存在某個值或者某個對象的值的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評論

柳州市| 成都市| 沙河市| 永修县| 广水市| 东港市| 洞头县| 韶山市| 安西县| 泽库县| 枞阳县| 库车县| 尼木县| 广昌县| 前郭尔| 连云港市| 会昌县| 庆阳市| 泽库县| 民权县| 奉节县| 阆中市| 东莞市| 万源市| 习水县| 天柱县| 桃江县| 丰宁| 德清县| 乌鲁木齐市| 辽宁省| 永安市| 应用必备| 西乌珠穆沁旗| 长兴县| 深州市| 阳谷县| 四平市| 兴山县| 积石山| 霍城县|