【问题标题】:(Mobile) Safari loading resources despite cache manifest(移动)Safari 加载资源,尽管有缓存清单
【发布时间】:2011-07-23 11:05:48
【问题描述】:

我一直在开发一个使用离线缓存的网络应用程序,部分原因是为了减少在使用时对服务器的调用次数。

我希望让登录页面加载并缓存所有资源,这样登录后面的所有页面就不必这样做了。

我从服务器日志中注意到的是,尽管在登录页面加载时会请求清单中的所有资源(图像、样式表、javascript 文件),但在用户登录并重定向到之后,例如, /workspace/,Safari(桌面版和移动版)似乎再次请求/workspace/ 中列出的样式表和javascript 文件,从而导致来自服务器的HTTP 304

虽然服务304 的负载很小,但我想知道是否有办法避免这些负载。我在Chrome(开发通道)中测试了相同的代码,Chrome只在登录后再次请求缓存清单,就是这样。

任何想法都将不胜感激!提前致谢!

【问题讨论】:

  • 我也有类似的问题。事实上,我注意到移动版 Safari 甚至根本不请求缓存清单!换句话说,我的应用程序可以在桌面上离线运行,但在 iPad/iPhone 上 - 算了。

标签: html safari mobile-safari manifest.cache


【解决方案1】:

我注意到在我的离线应用程序中,主机页面(其中包含清单标签的页面)也必须在清单文件中(仅在 iPhone iOS 4.3 之后),这支持在航空公司/离线模式下启动. 也许这也与您的问题有关。

iOS 4.3 的离线模式有问题 (阅读这篇文章以获得更多关于 4.3 问题 http://www.theregister.co.uk/2011/03/15/apple_ios_throttles_web_apps_on_home_screen/ 的信息)但是当我更新到 4.3.2 时,它又可以工作了。

【讨论】:

  • 我已经尝试将主机页面添加到清单缓存中,但是(事后看来,这并不奇怪),Safari 在拉动清单时会调用每个主机页面。这会导致对相同资源的多次请求,因为每个主机页面都使用相同的资源引用相同的缓存清单。
【解决方案2】:

我在 iOS 4.3.3 中发现了一个有趣的情况。我有一个在 iPad 上的 iOS 4.2 中运行的 HTML5 离线应用程序。但是我将我的 iPad 更新到 iOS 4.3.1,它不能再从主屏幕以离线模式运行。但是,当我看到“user593037”说它在 iOS 4.3.2 上运行时,我再次更新了我的 iPad,今天它在 iOS 4.3.3 上。

最初我的离线应用仍然无法离线运行。所以我回到了最基础的离线网页,我使用“cache.manifest”作为它工作的清单文件名。因此,似乎在 iOS 4.3.3 上,脱机缓存仅在用于缓存清单的文件名时才有效。我什至尝试使用 cache2.manifest 的文件名,但它无法脱机运行。

您还可以将“apple-mobile-web-app-capable”设置为“yes”,全屏运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多