我正在寻找一种优雅的方式来缓存客户端上的集合中的下载和缓存项目。
假设您要求批次从0到50而不是从174-223等... 有人熟悉处理这种问题的库或算法吗?
答案 0 :(得分:1)
让我们设想一个用于获取数据的简单函数。
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);
显然,如果您不要反复询问完全相同的范围,即使数据本身已被缓存,这也不会起作用,但它应该是一个很好的起点。