小程序 内存缓存

项目背景和上一篇博客一样。

是一个和业务逻辑相关的问题了,就是我做页面路由(确定跳转到哪个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

你可能感兴趣的:(H5/Mini-Program)