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