【问题标题】:Service Worker: files are updated on the server but old version showing in browserService Worker:文件在服务器上更新,但旧版本显示在浏览器中
【发布时间】:2017-10-20 13:42:59
【问题描述】:

我正在 Google AppEngine 上使用 PouchDB 构建一个静态应用程序。

当我在浏览器窗口中打开该网站时,它显示的是我几个小时前上传的版本。

如果我在隐身窗口中打开网站,则会显示更新版本(因此我认为这实际上不是控制台中的错误)。

我在app.yaml放了一个新的版本号

我已将所有流量迁移到新版本。

我已经清除了我的缓存,删除了 cookie,检查了我的应用程序数据,一切。我什至重新安装了 Chrome 和 Firefox。

我昨天更新了我的 Python 版本和我的 Google AppEngine Launcher;问题早于该更新。

另外:刚刚发现如果我去更新版本的网址 http://4.[app-id].appspot.com,它会显示正确的更新版本。

这发生在 Chrome、Firefox 和 Edge 中。

编辑:可能应该提到我的站点使用 Service Worker 和 IndexedDB。我假设我的服务人员正在缓存以前的版本,但我原以为Ctrl + F5 会清除缓存并显示新版本。

【问题讨论】:

  • @dan-cornilescu 感谢您提出缓存问题 - 这是一个缓存问题,但应用程序缓存而不是浏览器缓存。

标签: service-worker application-cache


【解决方案1】:

我认为一定是 Service Worker 缓存了页面(毕竟这是他们应该做的)。但是,这实际上在您进行开发时真的很烦人。

一个叫Rich Harris has documented this behaviour and some workarounds on a Github Gist的人。

重新加载页面的行为不符合您的预期

如果您对 Service Worker 进行了更改,则重新加载页面 不会杀死旧的并激活新的(它会检测到更改 通过每次请求服务工作者文件并比较旧的 和新的逐字节),让您对为什么有些困惑 您的更改尚未生效。这是因为旧窗户是 从未真正关闭,这意味着永远没有时间将它们换掉—— 你需要完全杀死标签然后重新打开它。

或者您可以让浏览器为您执行此操作,方法是转到 devtools 中的应用程序选项卡(在 Canary 中,尚不稳定的 Chrome),正在运行 到 Service Worker 部分,并检查“重新加载时更新”。

更新(2017 年 11 月 13 日):Chrome 现已提供此功能,因此您甚至无需下载 Canary。

以下是要清除应用程序缓存的哪些位:

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    相关资源
    最近更新 更多