我有一个离子电容器,可将iOS应用程序(使用WKWebView)与本地html和Rest API内容进行反应
所有API端点都可以使用缓存,但其中一个端点返回的数据量非常大(压缩后2MB,未压缩16MB)
我真的希望将其缓存,但是似乎WKWebView可以存储最大大小。
如果我只是降低端点返回的数据的约数,则进行缓存工作,即得到304s
有什么想法是极限,如何达到极限,或以其他方式处理?
通过反复试验编辑,似乎限制为10MB(未压缩-或gzip的一些奇怪值〜1.2 MB)
答案 0 :(得分:0)
WKWebView可缓存对象的限制为10MB,未压缩存储在缓存中。
似乎不可能合理地提高此限制(在撰写本文时,<= iOS13)。
可以使用WKWebKit拦截请求,并直接使用URLSession / URLCache。需要注意的是,如果响应的大小小于缓存大小的5%,URLCache将仅存储响应-我想这与WKWebView不直接缓存大于等于10MB的原因相同。因此,就我而言,我不得不创建一个〜600MB的URLCache来容纳它。我尝试使用storeCachedResponse(_:for :)手动存储响应,但在检索响应时似乎出现了损坏-没想到为什么拥有600MB缓存对于我的用例来说几乎可以接受。
Apple文档指出URLCache仅在以下情况下缓存:
编辑除此之外,我发现仅增加URLCache的大小是不可靠的,即使Etag并未更改,但经常会出现高速缓存未命中的情况。相反,我创建了一个单独的小型URLCache(刚需要存储的数据的两倍多)。将缓存策略设置为.reloadIgnoringLocalCacheData
,然后手动存储/检索缓存的数据。