Huxpro / Huxpro/huxpro.github.io
Service Worker 判断页面更新的机制
- Dominant language
- HTML
- Stars
- 7.6k
- Forks
- 6.6k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 1
Description
看到 `sw.js` 里面有这么一个逻辑:
```js
function revalidateContent(cachedResp, fetchedResp) {
// revalidate when both promise resolved
return Promise.all([cachedResp, fetchedResp])
.then(([cached, fetched]) => {
const cachedVer = cached.headers.get('last-modified')
const fetchedVer = fetched.headers.get('last-modified')
console.log(`"${cachedVer}" vs. "${fetchedVer}"`);
if (cachedVer !== fetchedVer) {
sendMessageToClientsAsync({
'command': 'UPDATE_FOUND',
'url': fetched.url
})
}
})
.catch(err => console.log(err))
}
```
是使用资源的 `last-modified` 是否有变化来决定是否通知用户页面有更新,但是这里有个问题是,假设我只是修改了 `about` 页面,当我打开首页的时候,也会收到页面更新的通知;然后,我再打开 `about` 页面,依然会收到页面更新的通知。
更糟的是,只要我更新了任意一个 `page` 或者 `post`,打开任意一个页面的时候,都会提醒我需要更新页面,点了更新之后,再打开其他页面,还是会让我更新页面。
那么:
1. 此处的逻辑是否符合预期?
2. 有什么办法调整成我更新一个 post 后,只在 `index` 或者 `page1` or `page2` 提醒更新呢?
3. 有什么办法调整成我更新一个 page 后,只更新首页呢?
4. 有什么办法调整成我更新任意内容后,通知更新后,只需要点击一次 `更新` 即可,之后后续再打开任意页面都不会再提醒有更新呢?
另外:
我是使用了 build 后的位于 _site 下的文件放在了 GithubPages,没有直接将源码暴露出来,二者在两个仓不同的仓库中,每次 源码 build 后会 `-force` 更新 GithubPages 的内容:https://github.com/Xheldon/x_blog
@Huxpro
谢谢!
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.