React Native 的 fetch 缓存行为是什么

efw*_*mes 6 fetch http-caching react-native expo

目前 React Native 在fetch调用中缓存的默认行为是什么?官方 FB 指南只是说“看看 Mozilla!” 但我们不是在网络浏览器上。由于中间件,我认为缓存行为在这里是自定义的。

假设我这样做: fetch("https://exampleserver.com/myfile.json")

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

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

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

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

  • 世博会对此有影响吗?

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

Aar*_*ger 9

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

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

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

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

我不认为世博会对此有影响。