茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    總結(jié)JavaScript三種數(shù)據(jù)存儲方式之間的區(qū)別
    來源:易賢網(wǎng) 閱讀:1627 次 日期:2016-07-06 10:30:23
    溫馨提示:易賢網(wǎng)小編為您整理了“總結(jié)JavaScript三種數(shù)據(jù)存儲方式之間的區(qū)別”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了JavaScript三種數(shù)據(jù)存儲方式之間的區(qū)別,指的分別是sessionStorage和localStorage以及cookie三種瀏覽器端的數(shù)據(jù)存儲方式,需要的朋友可以參考下

    sessionStorage 、localStorage 和 cookie 之間的共同點:

    都是保存在瀏覽器端,且同源的。

    sessionStorage 、localStorage 和 cookie 之間的區(qū)別:

    cookie數(shù)據(jù)始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務(wù)器間來回傳遞。而sessionStorage和localStorage不會自動把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存。cookie數(shù)據(jù)還有路徑(path)的概念,可以限制cookie只屬于某個路徑下。

    存儲大小限制也不同,cookie數(shù)據(jù)不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數(shù)據(jù),如會話標(biāo)識。sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達(dá)到5M或更大。

    數(shù)據(jù)有效期不同,sessionStorage:僅在當(dāng)前瀏覽器窗口關(guān)閉前有效,自然也就不可能持久保持;localStorage:始終有效,窗口或瀏覽器關(guān)閉也一直保存,因此用作持久數(shù)據(jù);cookie只在設(shè)置的cookie過期時間之前一直有效,即使窗口或瀏覽器關(guān)閉。

    作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。

    Web Storage 支持事件通知機制,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽者。

    Web Storage 的 api 接口使用更方便。

    封裝的localStorage的方法,可以控制存儲數(shù)據(jù)的條數(shù),以及時間

    define(function (require) {

      var $ = require('jquery');

      var Cache = {};

      function support() {

        var _t = !(typeof window.localStorage === 'undefined');

        return _t;

      }

      $.extend(Cache, {

        config: {

          size: 5,

          // lifeTime: 86400 //一天的秒數(shù)

          lifeTime: 1*60

        },

        localStorage: window.localStorage,

        memQueue: (function () {

          if (support()) {

            var jsonStr = window.localStorage.getItem('LRUConfig');

            return jsonStr ? JSON.parse(jsonStr) : {

              keys: {},

              objs: []

            };

          } else {

            return {};

          }

        })(),

        get: function(appid, url) {

          if (true == support()) {

            var key = appid + ':' + url;

            //開始做LRU算法。

            this.LRU(key);

            //LRU算法結(jié)束。

            var isFresh = true;

            var nowTime = (new Date()).getTime() / 1000;

            if(key in this.memQueue.keys){

              var cacheTime = this.memQueue.keys[key].life / 1000;

              //如果過期時間超過 配置的lifeTime,

              //則清除掉當(dāng)前緩存

              if(nowTime - cacheTime >= this.config.lifeTime){

                delete this.memQueue.keys[key];

                for (var i=0, len = this.memQueue.objs.length; i < len; i++) {

                  var _o = this.memQueue.objs[i];

                  if(_o.key == key){

                    this.memQueue.objs.splice(i,1);

                    break;

                  }

                }

                isFresh = false;

              }

            }

            //如果isFresh為假,就是已過期,則返回null,否則從localStorage中取

            return (false == isFresh) ? null : this.localStorage[key];

          }

        },

        set: function(appid, url, value) {

          if (true == support()) {

            var key = appid + ':' + url;

            var lruKey = this.getLRU();

            //淘汰最近最少使用的這個。

            //另外起一個方法讀取最符合淘汰的這個

            //前提是當(dāng)前這個key,不在localStorage里面。

            if (lruKey) {

              this.localStorage.removeItem(lruKey);

            }

            //開始設(shè)置一下這個值

            //為了兼容性,用以下方法設(shè)置

            if (typeof this.memQueue.objs != 'undefined' &&

              this.memQueue.objs.length <= this.config.size) {

              this.localStorage.removeItem(key);

            } else {

              while (this.memQueue.objs.length >= this.config.size) {

                var lruKey = this.getLRU();

                //淘汰最近最少使用的這個。

                //另外起一個方法讀取最符合淘汰的這個

                if (lruKey) {

                  this.localStorage.removeItem(lruKey);

                  delete this.memQueue.keys[lruKey];

                  for (var i = 0; i < this.memQueue.objs.length; i++) {

                    var _o = this.memQueue.objs[i];

                    if(_o.key == lruKey){

                      this.memQueue.objs.splice(i,1);

                      break;

                    }

                  }

                }

              }

            }

            this.localStorage[key] = value;

            //當(dāng)前的key,也必須lru一下

            this.LRU(key);

            //lru結(jié)束

            this.localStorage.setItem('LRUConfig', JSON.stringify(this.memQueue));

          }

        },

        /*

         * 近期最少使用算法

         */

        LRU: function(key) {

          var memQueue = this.memQueue;

          if (typeof memQueue.objs != 'undefined') {

            var _o = memQueue.objs;

            //開始計算那個要淘汰的key,

            //就是那個times最大的,如果times最大的有幾個

            //則返回那個time最小的

            var isIn = false;

            for (var i = 0, len = _o.length; i < len; i++) {

              _o[i].times = (key == _o[i].key) ? 0 : _o[i].times + 1;

              _o[i].time = (key == _o[i].key) ? (new Date()).getTime() : _o[i].time;

              if(key == _o[i].key && false == isIn){

                isIn = true;

              }

            }

            // 如果

            if(false == isIn){

              var _to = {

                'key': key,

                'times': 0,

                'time': (new Date()).getTime(),

                'life': (new Date()).getTime()

              };

              this.memQueue.keys[key] = _to;

              this.memQueue.objs.push(_to);

            }

            _o.sort(function(f, s) {

              //按times降序排列。

              if (f.times < s.times) {

                return 1;

              } else if (f.times > s.times) {

                return -1;

              } else {

                //開始比較time

                //按time,時間升序排列

                if (f.time < s.time) {

                  return -1;

                } else {

                  return 1;

                }

              }

            });

          } else {

            this.memQueue.objs = [];

            this.memQueue.keys = {};

            var _to = {

              'key': key,

              'times': 0,

              'time': (new Date()).getTime(),

              'life': (new Date()).getTime()

            };

            this.memQueue.keys[key] = _to;

            this.memQueue.objs.push(_to);

            return null;

          }

        },

        /*

         * 讀取需要淘汰的一項

         */

        getLRU: function() {

          var _o = this.memQueue.objs;

          if (_o) {

            return (_o.length >= this.config.size) ? _o.shift().key : null;

          }

          return null;

        }

      });

      return {

        'cache': Cache

      };

    });

    使用方法

    var cache = require('cache');

    // set 值

    cache.Cache.set('ip', '你自己的一個url', value);

    // get值

    cache.Cache.get('ip')

    更多信息請查看網(wǎng)絡(luò)編程
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)