随着服务人员的出现,带来了极大的灵活性和力量,但也带来了很大的责任感......在控制缓存方面,不允许它不必要地增长。
有没有办法确定缓存项目的期限,即它在缓存中的停留时间,并根据期限定期清除缓存的项目?
我在这里思考以下几点:
const RUNTIME = 'runtime-cache';
var getAgeOf = function (request) {
return (*time since request was cached*); // <-- but HOW?
};
var purgeRuntimeCache = function (threshold) {
caches.open(RUNTIME).then(function (cache) {
cache.keys().then(function (keys) {
keys.forEach(function (request, index, array) {
cache.match(request).then(function (response) {
if (getAgeOf(request) > threshold) {
console.log('delete old resource from runtime cache: ' + request.url);
cache.delete(request);
}
});
});
});
});
};
Workbox人员似乎正在从响应的标头中解析“日期”。如果日期不可用,他们还假设响应是新鲜的。在这里检查他们的源代码是否有cacheExsisionplugin。我想人们还可以在第一次从网络获取资产时将缓存时间保存到IndexedDB或缓存(例如,资产url作为键)。
虽然手工实现这样的东西并深入研究细节是一个很好的练习,但我的直觉认为人们通常应该更好地使用库来处理软件。Workbox可能是最好的选择。
更新:
我自己也没有试过,但我不认为这在实践中不起作用。