窗口.applicationCache更新冻结浏览器-如何减少他们的频率或强迫他们是用户发起的

window.applicationCache updates freeze browser - how to reduce their frequency or force them to be user-initiated

本文关键字:他们是 用户 频率 他们的 冻结 更新 applicationCache 浏览器 何减少 窗口      更新时间:2023-09-26

我创建了一个web应用程序,通过applicationCache缓存所有必要的代码和数据以供离线使用。然而,每次应用程序启动时,它都会立即尝试检查更新。这会在相当长的一段时间内阻塞浏览器,即使它找不到任何要更新的内容。这种行为对应用程序是高度破坏性的(难道不应该在后台进行更新吗?)在移动设备上,仅仅检查就需要花费很多时间,如果它发现更新,那么下载需要多长时间(b/c它必须重新下载所有文件)——这也会冻结浏览器。

所以,我想知道:

    是否有一种方法可以将applicationCache更新委托给共享的Web Worker?或
  1. 是否有一种方法来阻止所有的applicationCache更新,直到用户特别想检查更新,并按下一个按钮,将通过applicationCache.update()启动更新?或
  2. 是否有其他方法可以减少检查更新所花费的时间?
  3. 应用程序缓存更新不应该在后台异步运行吗?



编辑:也许在清单文件上精心构建的缓存控制头是答案?我会调查这个,但我希望有人能给我更多的信息,这些更新。谢谢。


更新

好吧,我已经玩了头,没有什么帮助。我开始悬赏了。如果你能帮忙,请帮忙!

如果您想让用户对实际更新有更多的控制,您可以使用特定于该用户的东西来参数化manifest URL。然后,当用户想要更新时,您向服务器发出请求,该服务器滚动特定用户的清单文件,然后重新加载页面客户端以强制重新加载清单。

我一直在做一些阅读,并发现这篇文章似乎是一个更优雅的解决方案,如果用户已经在缓存页面-

http://www.html5rocks.com/tutorials/appcache/beginner/toc-updating-cache

至于舱单最新检查所涉及的加载时间,这不是我遇到过的问题。我的理解是它发生在后台,你只是关心浏览器显示加载提示吗?

abort()方法可能是答案…总有一天,但我还没有遇到任何浏览器实现它。

我也遇到过类似的问题,并尝试了所有方法,包括将清单放入自身内部以查看它是否会缓存自己的疯狂想法。所以我可以用ajax请求和eval javascript填充到localStorage手动更新。

最后,我用一个简单的清单创建了一个非常简单的html页面。当我测试它时,UI没有锁定。慢慢地,我开始向页面中添加一些东西,并摆弄清单内容,看看在applicationCache检查期间,哪些东西可能会导致页面冻结。当我在页面中添加了一张图像,但却没有将其显示在清单中时,我终于遇到了失败——这时UI又开始锁定。我回到了原来的项目,发现了一些需要在清单中的图像,并且也修复了锁定UI的问题。

applicationCache 的检查阶段尝试是异步的(至少在我测试过的设备上)。但是,如果清单中缺少文件,则必须等待applicationCache完成对的检查。

似乎当浏览器需要一个没有被缓存的文件时,它等待applicationCache完成更新,然后才会对该文件发出请求——这是有意义的,因为其他资源可能依赖于丢失的文件。这对渲染起到了抑制作用,并使UI冻结。如果清单不可达(例如在不同的网络上),UI可以锁定大约一分钟。

要找到需要添加到清单中的文件,请在刷新应用程序几次时查看服务器日志。