我正在寻找一种优雅的方式来延迟下载和缓存客户端集合中的项。
假设您要求从0-50开始批量,而不是从174-223开始批量……
有人熟悉处理此类问题的库或算法吗?

最佳答案

让我们设想一个简单的函数来获取数据。

function fetch(from: Number, to: Number): Promise<Object>

此函数接受一个范围并返回一个Promise,它将解析为我们想要的数据(该数据是什么并不重要)假设函数每次都调用服务器来获取数据。如果您知道服务器上的数据不会改变,我们可以用一种非常简单的方式添加缓存我们只需要创建一个函数,在内部使用fetch并保存结果。最基本的方法可能是这样的。
function makeCachedFetch() {
  var cache = {};
  return function cachedFetch(from, to) {
     var key = from + '-' + to;
     if (!cache[key]) {
       // we keep promises in the cache
       cache[key] = fetch(from, to);
     }
     return cache[key];
  };
}

// now we just make an instance of our cached fetch function
var cachedFetch = makeCachedFetch();
// this will call the server
cachedFetch(0, 50);
// bu this won't
cachedFetch(0, 50);

显然,如果不一遍一遍地要求完全相同的范围,即使数据本身是缓存的,这也不起作用,但这应该是一个很好的起点。

10-06 01:05