【发布时间】:2020-08-07 01:36:48
【问题描述】:
StackOverflow 美好的一天!
我担心我的软件。打开页面时。我不知道如何使用技术术语来解释这一点,所以我将根据我的观察来解释一下。
当我打开一个新主页时,它会加载页面并保存缓存。当我登录网站时,页面会发生变化,生成图像、用户名等。到目前为止一切都很好。当我注销时,我的预期页面应该是默认主页,但它仍然显示页面,就像用户登录网站时一样。
这发生在我的本地服务器、远程电脑和智能手机上(在网页和 PWA 应用上)
如果我删除生成的缓存,它会恢复正常。在这种情况下我该怎么办?
这是我的 sw.js 文件:
const dynamicCacheName = 'ver-v1';
// activate event
self.addEventListener('activate', evt => {
evt.waitUntil(
caches.keys().then(keys => {
return Promise.all(keys
.filter(key => key !== dynamicCacheName)
.map(key => caches.delete(key))
);
})
);
});
// fetch event
self.addEventListener('fetch', evt => {
evt.respondWith(
caches.match(evt.request).then(cacheRes => {
return cacheRes || fetch(evt.request).then(fetchRes => {
return caches.open(dynamicCacheName).then(cache => {
cache.put(evt.request.url, fetchRes.clone());
return fetchRes;
})
});
})
);
});
【问题讨论】:
-
我认为当我注销时,缓存仍然认为我仍然登录到应用程序,因此它仍然显示登录页面。我该如何处理?
-
问题在于
cache.put(...)最有可能为用户保存 API 响应(即,您应该从缓存中排除 api 调用,这也会引发 API 中的新数据问题,因为旧的数据仍在缓存中) -
其实cache.put(...)是保存所有缓存的那行代码。如果我对此发表评论,PWA 离线将无法正常工作
-
我会尝试使用它,看看我是否只能在我点击注销时删除缓存中的 API ..
-
我并不是要完全删除
cache.put而是将其放在 if 语句中
标签: javascript caching progressive-web-apps service-worker