iOS6网络应用程序的最大缓存大小是多少?我如何扩展它



我正在为iPad(运行iOS 6+)构建一个网络应用程序,显示一家公司的产品系列。

使用HTML5的"cache.manifest"文件,一切都很完美。但由于缓存已增长到50MB左右,iPad不再保存应用程序数据。根据Safari的设置,缓存大小现在是0.1KB,而不是50MB。

那么,Safari对网络应用程序的缓存实际限制是多少?有没有办法扩大应用程序缓存的最大数量?

编辑2014年6月2日:iOS7.1中的最大缓存大小为300Mb。

最近一位客户问了我这个确切的问题,所以我进行了调查。

根据IOS6(我的所有测试都是在IOS6.1上完成的),这是两件不同的事情:

  • 使用.manifest的网站,通过移动Safari访问
  • 主屏幕上的网络应用程序,从网站创建

一个带有.manifest的网站在请求用户许可的情况下可以使用高达50mb的缓存。它不能再多用了。此值可以在设置/safari/advanced中找到并清除。如果您尝试在缓存中填充更多内容,error事件将被激发,window.applicationCache.status将变为IDLE。

网络应用程序与其网站不共享相同的缓存清除缓存设置/safari/advanced对主屏幕网络应用程序没有任何帮助。在没有用户输入的情况下,它将接受超过50mb的缓存,但我不知道具体有多少(我测试了60mb,成功了,完全可以离线访问。*编辑:尝试了83mb,成功了)我不知道在iOS设置中可以在哪里看到这些数据。我想不会。

在我找到规范之前,测试这是一件痛苦的事情。有一个API可以在iOS6上完美工作。
您应该检查window.applicationCache.status,它告诉您应用程序的状态,以及以下事件(从我的代码中剪切和粘贴,因此使用它们的侦听器):

window.applicationCache.addEventListener('checking', onChecking);
window.applicationCache.addEventListener('noupdate', onNoupdate);
window.applicationCache.addEventListener('downloading', onDownloading);
window.applicationCache.addEventListener('progress', onProgress);
window.applicationCache.addEventListener('cached', onCached);
window.applicationCache.addEventListener('updateready', onUpdateready);    
window.applicationCache.addEventListener('obsolete', onObsolete);
window.applicationCache.addEventListener('error', onError);

所有人都在iOS 6.1上工作,即使是带有event.loadedevent.totalprogress事件

Web应用程序从检查开始,然后在.manifest相同的情况下激发noupdate。状态为IDLE

如果.manifest发生更改,则状态为DOWNLOADING,为清单中的每个文件激发progress事件,则状态是UPDATEREADY,激发updateready

如果您处于脱机状态,则会触发error事件,状态为IDLE

您可以使用测试在线/离线状态

var online = navigator.onLine ? 'online' : 'offline';

它有效,但规格说明它不可靠。

还有三件事要完成:

  • 我的清单名为cache.manifest,声明如下<html manifest="cache.manifest">
  • my.htaccess有AddType text/cache-manifest manifestExpiresByType text/cache-manifest "access plus 0 seconds"
  • 我的应用程序有<meta name="apple-mobile-web-app-capable" content="yes">

有了这个API,就更容易理解引擎盖下发生了什么。不过,一定要自己做测试,我不能100%确定这个结果,也不能用新的iOS版本。我将进一步测试最大尺寸。

相关内容

  • 没有找到相关文章

最新更新