【问题标题】:Service Worker get from cache then update cacheService Worker 从缓存中获取然后更新缓存
【发布时间】:2018-01-07 23:53:33
【问题描述】:

我在我的 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);
        });
}

问题:这个函数及其位置对于完成上述逻辑是否有意义?

【问题讨论】:

    标签: javascript caching service-worker


    【解决方案1】:

    您所描述的是一种在重新验证时过时的策略。

    Jake Archibald 的The Offline Cookbook 是寻找不同 Service Worker 缓存策略实现的规范地点。有一个 section 涵盖了 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;
          })
        })
      );
    });
    

    【讨论】:

    • Promise.race 与缓存和网络响应一起使用会更好吗?
    • 当然,如果您对是否使用缓存或“新鲜”响应有一些不确定性,您可以。
    • 如果我希望网络响应不仅更新缓存而且在它到达时可见怎么办?比如显示过时的信息一秒钟,然后用新信息更新它
    猜你喜欢
    • 2019-10-08
    • 2022-01-09
    • 2016-02-09
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-05-27
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多