Safari和它贪婪的贪婪缓存

时间:2014-06-26 15:17:54

标签: caching safari mobile-safari browser-cache

现在这已经在这里找到了一点点,所以我想我正在寻找一个解释而不是一个修复(虽然这将是王牌),但Safari的后退/前进缓存是可怕的贪婪。

我遇到了表单提交的问题,但在转到表单操作页面之前加载了插页式模式窗口。在Safari上,缓存是如此强大,以至于后退按钮的模态打开仍然让我的灵魂非常难过。

我通过解雇模式然后提交表单来解决它。在后面,浏览器有一个半封闭的模态(它的引导程序,因此它会消失)然后只是继续解雇。

现在我知道onunload =""但刷新页面似乎很疯狂。缓存是一件好事,也是你想要的东西,特别是在手机上。

我想我的问题是:

为什么它比Chrome更强烈,无论如何强制浏览器缓存状态而不仅仅是最后一个状态?

由于

1 个答案:

答案 0 :(得分:4)

哈,贪心是轻描淡写!老实说,99%的时候,Safari背后的caching设计是处理移动设备上页面转换的理想方式。

当您从Page A转到Page B,然后回到Page A时,您不想让设备负担(带宽,电池寿命)获取资源和资产,当你可以暂停"暂停"互动之间的状态,然后"继续"当你导航回来时。

这实际上是Safari Mobile的功能。他们使用Page Cache的概念,当您从一个页面导航到另一个页面时,它将整个页面保存在内存中。这减少了获取这些资源的需要,并允许在单击时进行快速交互。

那太棒了......但它确实导致了问题(例如你提到的问题) - 具体来说,你如何区分被暂停的页面和应该被销毁的页面?

值得庆幸的是,WebKit提供了一个pageshowpagehide事件,可以访问Page Cache。除了在页面显示或隐藏时触发(类似于onunload),它还具有指示页面是persisted - 还是放入页面缓存的极佳能力。

虽然它不是一个完美的解决方案,但您可以检查pageshow事件的持久性,然后更直接地处理模式(因为您知道它已被缓存),就像立即隐藏它一样。

如果您还没有,请在此处查看以下两个链接:

https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

他们很好地解释了页面缓存,并包含了我之前引用的pageshowpagehide事件的代码示例。

希望这有帮助!