WKWebView 最大缓存对象大小
Posted
技术标签:
【中文标题】WKWebView 最大缓存对象大小【英文标题】:WKWebView max cached object size 【发布时间】:2019-10-24 08:28:29 【问题描述】:我有一个离子电容器反应 ios 应用程序(使用 WKWebView)与本地 html 和 Rest API 内容
缓存适用于所有 API 端点,但返回大量数据的 API 端点除外(2MB gzipped - 16MB un)
我真的很想缓存这个,但似乎 WKWebView 能够存储的最大大小。
如果我只是降低端点返回的数据的大约,然后缓存工作,即我得到 304s
知道限制是什么,如何提高限制或以其他方式处理?
编辑从反复试验中发现限制为 10MB(解压缩 - 或 gzip 的一些奇怪值 ~1.2 MB)
【问题讨论】:
【参考方案1】:WKWebView可缓存对象限制为10MB,解压后存储在缓存中。
似乎无法合法地提高此限制(
可以用WKWebKit拦截请求,直接使用URLSession/URLCache。需要注意的是,如果响应的大小 = 10MB 的原因相同。因此,就我而言,我不得不创建一个 ~600MB 的 URLCache 来适应它。我尝试使用 storeCachedResponse(_:for:) 手动存储响应,但在检索它时似乎损坏了 - 没有调查原因,对于我的用例来说,拥有 600MB 的缓存几乎可以接受。
Apple 文档指出 URLCache 仅在以下情况下才会缓存:
请求是针对 HTTP 或 HTTPS URL(或您自己的自定义 支持缓存的网络协议)。 请求成功(状态码在 200–299 范围内)。 提供的响应来自服务器,而不是来自 缓存。 会话配置的缓存策略允许缓存。 提供的 URLRequest 对象的缓存策略(如果适用)允许 缓存。 服务器响应中的缓存相关标头(如果存在)允许 缓存。 响应大小足够小,可以合理地放入缓存中。 (例如,如果您提供磁盘缓存,则响应必须为 no 大于磁盘缓存大小的大约 5%。)source
edit 更进一步,我发现只是增加 URLCache 的大小是不可靠的,而且即使 Etag 没有更改,也经常会出现缓存未命中。相反,我创建了一个单独的小型 URLCache(刚好是我需要存储的数据的两倍多)。将缓存策略设置为.reloadIgnoringLocalCacheData
并手动存储/检索缓存数据。
【讨论】:
以上是关于WKWebView 最大缓存对象大小的主要内容,如果未能解决你的问题,请参考以下文章