【问题标题】:WKWebView max cached object sizeWKWebView 最大缓存对象大小
【发布时间】:2019-10-24 08:28:29
【问题描述】:

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

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

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

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

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

编辑从反复试验中发现限制为 10MB(解压缩 - 或 gzip 的一些奇怪值 ~1.2 MB)

【问题讨论】:

    标签: ios caching wkwebview capacitor


    【解决方案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 并手动存储/检索缓存数据。

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2011-02-25
      • 2017-02-27
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多