当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《ServiceWorker从缓存中获取然后更新缓存》经验,为你挑选了1个好方法。

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

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

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> Jeff Posnick..:

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

寻找不同服务工作者缓存策略实现的规范场所是Jake Archibald的The Offline Cookbook.有一个部分涵盖了stale-while-revalidate,包括以下代码:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.open('mysite-dynamic').then(function(cache) {
      return cache.match(event.request).then(function(response) {
        var fetchPromise = fetch(event.request).then(function(networkResponse) {
          cache.put(event.request, networkResponse.clone());
          return networkResponse;
        })
        return response || fetchPromise;
      })
    })
  );
});


如果我想要网络响应不仅更新缓存而且在它到达时也可见?比如显示一秒钟的陈旧信息,然后用新信息更新它
推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有