gpt4 book ai didi

ios - WKWebView 最大缓存对象大小

转载 作者:行者123 更新时间:2023-11-29 13:53:02 31 4
gpt4 key购买 nike

我有一个 ionic 电容器 react iOS 应用程序(使用 WKWebView)与本地 html 和 Rest API 内容

缓存适用于所有 API 端点,除了一个返回大量数据的端点(2MB gzipped - 16MB un)

我真的很想缓存这个,但似乎 WKWebView 能够存储的最大大小是有限制的。

如果我只是降低端点返回的数据量,那么缓存就会工作,即我得到 304s

知道限制是什么、如何提高限​​制或以其他方式处理吗?

编辑 从试验和错误看来限制是 10MB(解压缩 - 或者 gzipped ~1.2 MB 的一些奇怪的值)

最佳答案

WKWebView可缓存对象的大小限制为10MB,解压后存储在缓存中。

合法地提高这个限制似乎是不可能的(<= iOS13 在撰写本文时)。

可以使用WKWebKit拦截请求,直接使用URLSession/URLCache。需要注意的是,URLCache 将仅在响应大小 < 缓存大小的 ~5% 时存储响应——我想这与 WKWebView 不直接缓存响应 >= 10MB 的原因相同。因此,在我的例子中,我不得不创建一个 ~600MB 的 URLCache 来容纳它。我尝试使用 storeCachedResponse(_:for:) 手动存储响应,但在检索响应时似乎出现损坏 - 没有研究原因,拥有 600MB 的缓存对于我的用例来说几乎是可以接受的。

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

  • 请求是针对 HTTP 或 HTTPS URL(或您自己的自定义支持缓存的网络协议(protocol))。
  • 请求成功(状态代码在 200-299 范围内)。
  • 提供的响应来自服务器,而不是来自缓存。
  • session 配置的缓存策略允许缓存。
  • 提供的 URLRequest 对象的缓存策略(如果适用)允许缓存。
  • 服务器响应中与缓存相关的 header (如果存在)允许缓存。
  • 响应大小足够小,可以合理地放入缓存中。(例如,如果您提供磁盘缓存,则响应必须为 no大于磁盘缓存大小的大约 5%。)

source

edit 除此之外,我发现只是增加 URLCache 的大小是不可靠的,而且即使 Etag 没有改变,也经常出现缓存未命中。相反,我创建了一个单独的小型 URLCache(刚好是我需要存储的数据的两倍多)。将缓存策略设置为 .reloadIgnoringLocalCacheData 并手动存储/检索缓存数据。

关于ios - WKWebView 最大缓存对象大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537237/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com