我正在寻找一种优雅的方式来延迟从客户端上的集合下载和缓存项目。
假设您请求的批次从 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);
显然,如果您不一遍又一遍地要求完全相同的范围,即使数据本身已缓存,这也不起作用,但这对您来说应该是一个很好的起点。