gpt4 book ai didi

javascript - 我如何实际显示 Workbox 中更新的 index.html?

转载 作者:可可西里 更新时间:2023-11-01 02:46:13 25 4
gpt4 key购买 nike

我有一个完全静态的网站 - index.html 和一些 CSS/JS/PNG 文件。我想使用服务 worker 来缓存所有这些。似乎 Workbox 应该使这变得容易。这是我的 sw.js:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.5.0/workbox-sw.js');
workbox.precaching.precacheAndRoute([]);
workbox.routing.registerNavigationRoute('/index.html');

这是我的构建脚本:

const workboxBuild = require("workbox-build");

// NOTE: This should be run *AFTER* all your assets are built
const buildSW = async () => {
console.log("Generating sw.js...")

const {count, size, warnings} = await workboxBuild.injectManifest({
swSrc: "src/sw.js",
swDest: "build/sw.js",
globDirectory: "build",
globPatterns: [
"**/*.{js,css,html,png}",
]
})

warnings.forEach(console.warn);
console.log(`${count} files will be precached, totaling ${size} bytes.`);
}

buildSW();

一切似乎都很好。构建脚本运行,service worker 被激活,我的网站即使在我离线时也能继续工作。太棒了!

然后我对index.html 做了一些修改。我重新加载我的页面。我在控制台中看到这条消息,表明它已经缓存了我的 index.html,尽管它仍然在浏览器中显示旧的:

Precaching 1 file. 35 files are already cached.

我相信这是正确的,它在显示缓存的 index.html 之后缓存新的 index.html。那么接下来重新加载它应该会显示新的 index.html,对吗?

错了!再次重新加载,仍然显示旧的 index.html。如此重复多次,没有变化。要真正看到新的 index.html,正常的重新加载将永远不起作用,我需要执行 ctrl+shift+R。

这不可能是它应该的工作方式,对吧?我一定遗漏了一些明显的东西,但我的代码非常简单,实际上是从 Workbox 网站上的示例中提取的,我看不出我哪里搞砸了。

编辑:我把 a ridiculously simple example of this problem on GitHub .我觉得很愚蠢 - 这个例子是如此简单,但我仍然无法弄清楚为什么它会这样。

最佳答案

好吧,我在创建赏金后不久就愚蠢地想出了答案。作为https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle说:

“一旦成功安装,更新的 worker 将等待现有 worker 控制零个客户端。(请注意,客户端在刷新期间重叠。)”

所以刷新永远不会切换到新版本,你必须完全关闭你的应用程序的所有打开的选项卡,然后再次导航到它。这似乎确实有效。

关于javascript - 我如何实际显示 Workbox 中更新的 index.html?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52324425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com