HTML5离线应用程序中是否需要swapCache()?

Jak*_*čar 11 html5 offline application-cache

如果我没有实现任何updateready事件处理程序而不调用swapCache(),这是否意味着浏览器将始终使用应用程序的第一个(最旧的)下载版本?

如果不是,那么为什么swapCache()需要这种方法呢?

小智 12

Swapcache确保从新缓存中获取对缓存资源的"后续"调用.swapcache之后的后续含义.要查看此操作,请尝试在updateready事件中的swapcache调用之后动态设置img的src属性(以便浏览器在该特定时间加载它).确保此图像尚未加载到页面的其他位置,因为这会扭曲此测试.现在更改映像并更改清单文件(强制重新加载缓存的文件).在浏览器中重新加载页面.您现在应该在渲染页面中看到新版本的图像.现在注释掉对swapcache的调用.对清单文件进行更改并重新加载页面,从而重新加载所有资源.再次刷新页面(以确保您拥有新缓存中的版本).现在再次更改图像并更改清单.再次重新加载页面:现在您看到图像的旧版本.在最后一种情况下,浏览器完成了在缓存中加载新版本,但由于未调用swapcache,因此仍然从旧缓存中获取图像.

如果您没有在页面中动态加载资源,则swapcache无效.

特别是,如果你在updateready事件处理程序中重新加载页面调用swapcache首先没有任何效果,因为重新加载页面无论如何都将从新的缓存中获取它.


ggu*_*erg 7

我有一个具有相当大缓存(> 100mb)的应用程序.这需要特别长的时间来交换缓存(并且在发生这种情况时几乎锁定了浏览器).所以我显示一条消息,指示应用正在更新(请稍候......),然后调用swapCache(),然后在完成后显示新消息.

不确定这是否回答了你的问题(至于为什么需要它),但我认为它swapCache()至少提供了一个有效的用例.

  • 测试.如果未调用`swapCache()`,则应用程序不会立即更新,而是在下次刷新页面时更新.因此,基本上您可以为用户提供立即更新或稍后更新的选项.如果他们正在做某事,这是一个不错的选择. (3认同)

小智 3

SwapCache 方法为应用程序提供了一种控制如何应用更新的机制。在常规 HTML 应用程序中,很难确定客户端浏览器上是否存在正确的 JS。此外,浏览器的实现方式也因缓存更新时间而异,我发现 iPhone 特别顽固。swapCache 让我重新掌控应用程序的更新方式,即我可以选择自动应用补丁或让用户选择何时应用等。

  • 在“updateready”上,我显示“更新可用,单击立即重新启动”通知,并在单击时执行“location.reload();”。如果他们不点击,应用程序会在下次加载时自行更新。我不明白如何使用“swapCache()”在不重新加载的情况下更新应用程序。并且*随着*重新加载,我无论如何都不需要`swapCache()`。我还是不明白什么时候需要。 (9认同)