【问题标题】:What are React Native's caching behaviors for fetchReact Native 的 fetch 缓存行为是什么
【发布时间】:2018-08-18 02:17:16
【问题描述】:

目前 React Native 在 fetch 调用中的默认缓存行为是什么?官方 FB 指南简单地说“看看 Mozilla!”但我们不在网络浏览器上。我会假设缓存行为是由于中间件而在此处自定义的。

假设我愿意:fetch("https://exampleserver.com/myfile.json")

  • 请求是否会在调用后自动缓存?

  • myfile.json的请求内容是否缓存了整个“会话”(即:App正在运行active/bg,但未被用户强制关闭)。

    • 请求缓存在哪里?即:是否使用AsyncStorage
    • fetch URL 是否会再次导致应用读取缓存。
    • 缓存有多“快”,如果由于某种原因我必须立即多次请求myfile.json,它是否会在那时基本上忽略缓存并进行所有这些单独的调用? (我在调试器中看到了这种行为)
  • 当我强制关闭应用程序并重新打开时,此缓存是否仍然存在?

    • 如果是这样,我可以请求缓存持久化吗?
  • iOS 中的这种行为与 Android 有什么不同?

  • 世博会对此有影响吗?

至少了解其中一些内容将有助于决定我是否需要像 https://gist.github.com/dslounge/18e555250a8df1f8218d702b21910eeb 那样使用 AsyncStorage 编写自定义缓存情况@

【问题讨论】:

    标签: react-native fetch expo http-caching


    【解决方案1】:

    React Native 的 fetch API 桥接到 iOS 上的 NSURLSession 和 Android 上的 okhttp3。这两个库都严格遵循 HTTP 缓存规范。缓存行为主要取决于 HTTP 响应中的 Cache-ControlExpires 标头。这些库中的每一个都有自己可以调整的配置,例如控制缓存大小或禁用缓存。

    不保证缓存文件在过期之前一直存在。系统可以随时清除它们。

    如果你非常快地发出三个请求,那么通常你会成功,因为缓存既不是立即的,也不是保证的。

    一般情况下:适当地设置您的 HTTP 响应标头,但不要依赖 HTTP 缓存来以某种方式表现您的应用程序的正常运行。如果你想保证第二个请求实际上不会建立网络连接,你需要自己编写。

    我认为世博会不会影响这一点。

    【讨论】:

    • 快回答!当前关于缓存的 HTTP 规范对于我们对性能敏感的情况肯定不是 100% 可靠的,因此我们将采取额外的步骤来存储本地数据。
    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2018-03-16
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多