WKWebView最大缓存对象大小

时间:2019-10-24 08:28:29

标签: ios caching wkwebview capacitor

我有一个离子电容器,可将iOS应用程序(使用WKWebView)与本地html和Rest API内容进行反应

所有API端点都可以使用缓存,但其中一个端点返回的数据量非常大(压缩后2MB,未压缩16MB)

我真的希望将其缓存,但是似乎WKWebView可以存储最大大小。

如果我只是降低端点返回的数据的约数,则进行缓存工作,即得到304s

有什么想法是极限,如何达到极限,或以其他方式处理?

通过反复试验

编辑,似乎限制为10MB(未压缩-或gzip的一些奇怪值〜1.2 MB)

1 个答案:

答案 0 :(得分:0)

WKWebView可缓存对象的限制为10MB,未压缩存储在缓存中。

似乎不可能合理地提高此限制(在撰写本文时,<= iOS13)。

可以使用WKWebKit拦截请求,并直接使用URLSession / URLCache。需要注意的是,如果响应的大小小于缓存大小的5%,URLCache将仅存储响应-我想这与WKWebView不直接缓存大于等于10MB的原因相同。因此,就我而言,我不得不创建一个〜600MB的URLCache来容纳它。我尝试使用storeCachedResponse(_:for :)手动存储响应,但在检索响应时似乎出现了损坏-没想到为什么拥有600MB缓存对于我的用例来说几乎可以接受。

Apple文档指出URLCache仅在以下情况下缓存:

  • 该请求是针对HTTP或HTTPS URL(或您自己的自定义 支持缓存的网络协议。
  • 请求成功(状态码在200-299之间)。
  • 提供的响应来自服务器,而不是来自服务器 缓存。
  • 会话配置的缓存策略允许缓存。
  • 提供的URLRequest对象的缓存策略(如果适用)允许 缓存。
  • 服务器响应中与缓存相关的标头(如果存在)允许 缓存。
  • 响应大小足够小以适合缓存。 (例如,如果您提供磁盘缓存,则响应必须为否 大于磁盘缓存大小的5%。)

source

编辑除此之外,我发现仅增加URLCache的大小是不可靠的,即使Etag并未更改,但经常会出现高速缓存未命中的情况。相反,我创建了一个单独的小型URLCache(刚需要存储的数据的两倍多)。将缓存策略设置为.reloadIgnoringLocalCacheData,然后手动存储/检索缓存的数据。