工兵和服务人员
Sapper and Service Workers
这更像是一个服务工作者问题,尽管它可能更具体到 Sapper。我真的不知道,因为我是第一个管理员,我与 Service Workers 斗争,几乎没有使用过它们,并且经常觉得它们很痛苦。
基本上,无论我做什么,我都无法 localhost:3000 停止加载应用程序的旧副本。我以各种方式注销了服务工作者,包括尝试以编程方式注销。我清除了缓存,甚至清除了浏览器中的所有浏览数据。我的 Sapper 开发环境中的服务器不是 运行.
这发生在 Brave 中,但在 Opera 中表现相同,并且看起来像是一般的 Chromium 场景。我不使用 Firefox 或 Safari,但可能会很快测试其中一个,看看那里会发生什么行为。
这是一个片段,展示了我如何尝试注销 Service Worker。
清除缓存,我唯一能绕过它的方法。
问题是 service worker 是来自缓存的服务,再次从缓存提供服务可能会将缓存中的此项重置为更有效的发送,并且您陷入了某种循环。
--
我发现这个问题是因为我正在考虑完全删除 service worker 以尝试使我的站点性能更高一些...
这是非常必要的吗?它有什么好处?
我使用了这个非常有效的小技巧。在您的 rollup.config.js
中,outputs
对象中有一个 serviceWorker
对象。
serviceworker: {
input: config.serviceworker.input(),
output: config.serviceworker.output(),
plugins: [
resolve(),
replace({
"process.browser": true,
"process.env.NODE_ENV": JSON.stringify(mode),
}),
commonjs(),
!dev && terser(),
],
preserveEntrySignatures: false,
onwarn,
},
定义一个变量 dev
如果还没有声明的话:
const dev = process.env.NODE_ENV === "development";
现在像这样更改您的 Service Worker 配置:
serviceworker: !dev && {
input: config.serviceworker.input(),
output: config.serviceworker.output(),
plugins: [
resolve(),
replace({
"process.browser": true,
"process.env.NODE_ENV": JSON.stringify(mode),
}),
commonjs(),
!dev && terser(),
],
preserveEntrySignatures: false,
onwarn,
},
确保关闭所有包含应用程序 运行 的浏览器选项卡,您无法在服务工作线程为现有版本的应用程序提供服务时更换它。如果存在任何缓存问题,也请在安装 service worker 后尝试重新加载页面。
这更像是一个服务工作者问题,尽管它可能更具体到 Sapper。我真的不知道,因为我是第一个管理员,我与 Service Workers 斗争,几乎没有使用过它们,并且经常觉得它们很痛苦。
基本上,无论我做什么,我都无法 localhost:3000 停止加载应用程序的旧副本。我以各种方式注销了服务工作者,包括尝试以编程方式注销。我清除了缓存,甚至清除了浏览器中的所有浏览数据。我的 Sapper 开发环境中的服务器不是 运行.
这发生在 Brave 中,但在 Opera 中表现相同,并且看起来像是一般的 Chromium 场景。我不使用 Firefox 或 Safari,但可能会很快测试其中一个,看看那里会发生什么行为。
这是一个片段,展示了我如何尝试注销 Service Worker。
清除缓存,我唯一能绕过它的方法。
问题是 service worker 是来自缓存的服务,再次从缓存提供服务可能会将缓存中的此项重置为更有效的发送,并且您陷入了某种循环。
--
我发现这个问题是因为我正在考虑完全删除 service worker 以尝试使我的站点性能更高一些...
这是非常必要的吗?它有什么好处?
我使用了这个非常有效的小技巧。在您的 rollup.config.js
中,outputs
对象中有一个 serviceWorker
对象。
serviceworker: {
input: config.serviceworker.input(),
output: config.serviceworker.output(),
plugins: [
resolve(),
replace({
"process.browser": true,
"process.env.NODE_ENV": JSON.stringify(mode),
}),
commonjs(),
!dev && terser(),
],
preserveEntrySignatures: false,
onwarn,
},
定义一个变量 dev
如果还没有声明的话:
const dev = process.env.NODE_ENV === "development";
现在像这样更改您的 Service Worker 配置:
serviceworker: !dev && {
input: config.serviceworker.input(),
output: config.serviceworker.output(),
plugins: [
resolve(),
replace({
"process.browser": true,
"process.env.NODE_ENV": JSON.stringify(mode),
}),
commonjs(),
!dev && terser(),
],
preserveEntrySignatures: false,
onwarn,
},
确保关闭所有包含应用程序 运行 的浏览器选项卡,您无法在服务工作线程为现有版本的应用程序提供服务时更换它。如果存在任何缓存问题,也请在安装 service worker 后尝试重新加载页面。