Service Worker从缓存中获取然后更新缓存

时间:2017-01-10 17:26:27

标签: javascript caching service-worker

我在服务工作者中使用以下逻辑(用我自己的话说):

  

如果存在缓存,请使用它,但也要从网络更新缓存以供日后使用

event.respondWith( // on `fetch`
    caches.open(CACHE)
        .then(function(cache) {
            return cache.match(request);
        })
        .then(function(matching) {
            if (matching) {
                requestAndUpdateCache(event);
                return matching;
            }
            ...

除了使用缓存响应进行响应之外,我还运行了名为requestAndUpdateCache的函数。

function requestAndUpdateCache(event){
    var url = event.request.url + '?t=' + new Date().getTime();
    fetch(url)
        .then(function(response){
            if (response && response.status === 200){
                caches.open(CACHE)
                    .then(function(cache){
                        cache.put(event.request, response.clone());
                    });
            }
        }, function(error){
            console.log(error);
        });
}

问题:此功能及其位置是否有助于完成上述逻辑?

1 个答案:

答案 0 :(得分:5)

您所描述的是一种陈旧的重新验证策略。

寻找不同服务工作者缓存策略实现的规范场所是Jake Archibald的The Offline Cookbook。有一个section涵盖了陈旧的重新验证,包括以下代码:

ClassLoader