【发布时间】:2017-05-06 18:00:40
【问题描述】:
我运行着运行 Hugo 的网站 https://www.igluonline.com,最近我按照 Google 的 sw-precache 安装了一个服务工作者。
这是配置文件:
module.exports = {
staticFileGlobs: [
'dist/css/**.css',
'dist/**/*.html',
'dist/images/**.*',
'dist/js/**.js'
],
skipWaiting: true,
stripPrefix: 'dist',
runtimeCaching: [{
urlPattern: /\/*/,
handler: 'networkFirst'
}]
};
注意事项:
虽然有时自动生成的代码会出现一些错误,但 Service Worker 可以正常工作并在 Web 和移动设备上提供离线体验。
它还将cache-control 设置为max-age=0,当我推送新代码时,它会进行更新。
问题:
我将runtimeCaching handler 设置为networkFirst 并根据Google 的sw-toolbox API(使用runtimeCaching 时出现在sw-precache 中)它应该最好从http 调用中获取页面,如果有没有连接,它应该回退到缓存。
但是当我刷新我的代码并打开一个新窗口进行测试时(请注意,我确实在更新之前关闭了运行该网站的所有选项卡和窗口),它将显示缓存页面。它自然会下载新的 service worker 并在第二次重新加载时更新页面,但我不希望我的访问者每次都刷新我的主页以获取新内容。
我尝试将runtimeCachingcode 更改为以下代码,希望至少可以直接从网络加载我的主页,但我没有运气:
runtimeCaching: [{
urlPattern: /\//,
handler: 'networkOnly'
},{
urlPattern: /\/*/,
handler: 'networkFirst'
}]
现在我不确定所需的 PWA 体验是否是这样的 - 这意味着用户必须重新加载两次或至少访问两个页面才能看到刷新的代码 - 或者我是否犯了一些错误。我真的很感激考虑。
【问题讨论】:
-
问题是在加载您的站点时用户总是获得缓存版本,还是当您更新 Service Worker 时,用户在加载第二个页面之前看不到新的 Service Worker 更改?跨度>
-
@abraham,感谢您的评论。那将是第二种选择。例如,当我用新文章更新我的网站时(因此是工作人员),用户在第二次加载同一页面或网站上的任何其他页面之前不会看到更改。
-
可能重复,因为这似乎与此处描述的同一问题有关:stackoverflow.com/questions/41422474/…
-
@lax1089 感谢您的链接,但这个问题是我在网上发现的第一个关于该问题的问题。那里的解决方案指定了最大年龄,不幸的是这不是我要解决的问题。我想我会认为 sw-prechace 是有缺陷的。
标签: javascript caching service-worker progressive-web-apps sw-precache