服务工作者具有很大的灵活性和强大功能,但也有很大的责任......在控制缓存方面不会让它不必要地增长。
有没有办法确定缓存项目的年龄,即它在缓存中的时间,并根据年龄定期清除缓存的项目?
我在这里想到的事情如下:
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);
}
});
});
});
});
};
答案 0 :(得分:2)
工作箱人似乎正在分析“约会”日期&#39;来自回复的标题。如果日期不可用,他们还会认为答案是新鲜的。在here上查看cacheExpiration插件的来源。我想也可以在第一次从网络中获取资产时将缓存时间保存到IndexedDB或Caches(例如,资产URL作为密钥)。
虽然通过手工实现这样的事情并深入细节是一个很好的练习,但我的直觉说人们应该通过使用库来处理SW一般更好。 Workbox可能是最好的选择。
更新
我自己没有尝试过,但我没有看到任何理由在实践中不起作用。