ウィジェットメモリキャッシュ

3077 ワード

プロジェクトの背景は前のブログと同じです.
ビジネスロジックに関する問題ですが、ページルーティング(どのpageにジャンプするかを決める)をしてバックグラウンドからデータを引くのですが、同じインタフェースがページにも使われています.これらのデータをよりよく利用するために、HTTPリクエストでキャッシュしました.
jsコードはこう書いてあります
var data ={};
var memory=function() {
  function push(key, value) {
    data[key] = {
      time: utils.now(),
      data: value
    }
  }
  function pop(key) {
    var obj = data[key];
    if (obj){
      delete cache[key];
      if (utils.now() - obj.time < 3)return obj.data;
    }
    return null;
  }
  function invalid(){
    data = {};
  }
  return {
    push: push,
    pop: pop,
    invalid: invalid,
    all: function () {
      return data;
    }
  }
}
module.exports = memory

GETネットワークリクエストのみをブロックするので、ネットワーク部分はこのようにカプセル化されています.
function GET(options) {
  //TODO  
  var memory = cache.memory();
  if (options && options.url) {
    if (options.cache) {
      // 
      var originSuccess = options.success;
      if (originSuccess) {
        options.success = (resp) => {
          memory.push(options.url, resp);
          originSuccess(resp);
        }
      }
    } else {
      // 
      var target = memory.pop(options.url);
      if (target && options.success) options.success(target);
      if (target) return;
    }
  }
  net(options, 'GET')
}

ps:netにはこちらのエラーコードがたくさん処理されています.コードの詳細は載せません.
キャッシュの有効時間を定義し、背景のニーズを簡単に効果的に満たします.使うときは、options.cache=trueです