Service Worker:文件在服务器上更新,但旧版本在浏览器中显示

时间:2017-10-20 13:42:59

标签: service-worker application-cache

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

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

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

我在app.yaml

中添加了新版本号

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

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

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

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

这种情况发生在Chrome,Firefox和Edge中。

编辑:可能应该提到我的网站使用Service Workers和IndexedDB。我假设我的服务工作者正在缓存以前的版本,但我认为Ctrl + F5将清除缓存并显示新版本。

1 个答案:

答案 0 :(得分:0)

我认为必须是服务工作者缓存页面(毕竟,这应该是他们应该做的)。实际上,当你开发时,这实际上很烦人。

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

  

重新加载页面的行为并不像您期望的那样

     

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

     

或者你可以通过浏览器让浏览器为你做这件事   devtools中的应用程序选项卡(在Canary中,尚未稳定的Chrome),继续   到“服务工作者”部分,并选中“重新加载更新”。

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

此处应用程序的哪些位缓存清除:

clearing the application cache