【问题标题】:How do i set caches expiration time through javascript using service worker or cache object如何使用服务工作者或缓存对象通过 javascript 设置缓存过期时间
【发布时间】:2019-03-06 15:18:15
【问题描述】:

我可以使用 delete 方法删除缓存数据。 但我想使用到期时间自动删除缓存数据。例如它应该在 6 小时内被删除。

caches.delete(cacheName).then(function(boolean) {
  // your cache is now deleted
});

【问题讨论】:

    标签: javascript caching browser-cache service-worker cache-control


    【解决方案1】:

    在向客户端发送缓存文件之前,您可以检查文件何时被获取,如果文件太旧,则获取新文件:

    const url = request.url;
    caches.open(cacheName).then(cache => {
      cache.match(url).then(response => {
        if(!response) {
          return fetch(url);
        }
    
        const date = new Date(response.headers.get('date'))
        // if cached file is older than 6 hours
        if(Date.now() > date.getTime() + 1000 * 60 * 60 * 6){
          return fetch(url);
        }
    
        // else return cached version
        return response;
      })
    })
    

    【讨论】:

    • 这是一个很好的入门解决方案。我认为这在一些常见情况下会起作用,但就像现实世界中的任何事情一样。此处不再赘述,篇幅有限,但最好的方式是让缓存暂时失效,需要为不同的路由模式设置规则。最简单的方法是利用 IndexedDB。我为此做了一些复杂的代码。但我建议检查一下 Workbox,它按时间和响应数量作为不同缓存模式的插件来显示失效
    【解决方案2】:

    我们在缓存对象中没有内置方法来在一段时间后删除缓存,但我们可以使用 setTimeout() 方法在等待指定的毫秒数后执行一次函数。因此,通过设置时间,您可以调用此删除方法并刷新数据。

    https://developers.google.com/web/ilt/pwa/caching-files-with-service-worker

    以上是缓存的谷歌文档。希望这会帮助你。

    【讨论】:

    • 嗨,@gajendran 感谢您的帮助。但是我在文档中找不到 setTimeout() 方法,我也搜索了我的解决方案来使用 javascript 设置缓存的过期时间,但没有得到它。
    猜你喜欢
    • 2020-08-03
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多