Javascript Service Worker 在网络超时后使用缓存
Javascript Service Worker use cache after network timeout
我有一个网络应用程序也应该可以离线使用。
为此,我使用 javascript service workers 将必要的文件放入缓存中。
如果连接正常,它会从网络加载所有资源。
如果没有连接,则从缓存中加载资源。
这工作正常。
现在的问题是,如果设备上有互联网连接但服务器已关闭。
然后它永远不会回退到缓存,因为它有互联网连接。
这是我在服务中获取事件的代码-worker.js:
self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request).catch(function() {
return caches.match(event.request);
})
);
});
我的想法是实现一种超时,如果应用程序无法在假设 30 秒内获取内容,则始终使用缓存。
有谁知道如何实现这个?我不太适合承诺...
我猜你的问题是你没有打开缓存实例,然后将请求与该缓存进行匹配。您使用缓存 API 不正确。
你需要这样的东西:
return caches.open('my-cache-name').然后...
强烈建议您通读以下内容:
https://serviceworke.rs/strategy-network-or-cache.html
同一个站点有很多不同的 SW 策略!
我有一个网络应用程序也应该可以离线使用。 为此,我使用 javascript service workers 将必要的文件放入缓存中。 如果连接正常,它会从网络加载所有资源。 如果没有连接,则从缓存中加载资源。 这工作正常。
现在的问题是,如果设备上有互联网连接但服务器已关闭。 然后它永远不会回退到缓存,因为它有互联网连接。
这是我在服务中获取事件的代码-worker.js:
self.addEventListener('fetch', function(event) {
event.respondWith(
fetch(event.request).catch(function() {
return caches.match(event.request);
})
);
});
我的想法是实现一种超时,如果应用程序无法在假设 30 秒内获取内容,则始终使用缓存。 有谁知道如何实现这个?我不太适合承诺...
我猜你的问题是你没有打开缓存实例,然后将请求与该缓存进行匹配。您使用缓存 API 不正确。
你需要这样的东西:
return caches.open('my-cache-name').然后...
强烈建议您通读以下内容: https://serviceworke.rs/strategy-network-or-cache.html
同一个站点有很多不同的 SW 策略!