React Native对于fetch请求的缓存行为是什么?

10
目前,React Native在fetch调用的缓存方面采取了哪些默认行为?官方FB指南只是说“看看Mozilla!”,但我们不在Web浏览器上。我认为中间件的结果会自定义缓存行为。
假设我这样做:fetch("https://exampleserver.com/myfile.json")
  • 请求在被调用后是否自动缓存?

  • myfile.json的请求内容是否在整个“会话”(即应用程序正在运行时-活动/后台,但未被用户强制关闭)期间缓存。

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

    • 如果是这样,我可以请求使缓存持久化吗?
  • 任何这些行为在iOS和Android上有所不同吗?

  • Expo是否会对此产生影响?

了解至少其中一些内容将有助于决定是否需要编写类似AsyncStorage的自定义缓存情况,如https://gist.github.com/dslounge/18e555250a8df1f8218d702b21910eeb中所示。
1个回答

12
React Native的fetchAPI在iOS上使用NSURLSession,在Android上使用okhttp3,这两个库都严格遵循HTTP缓存规范。缓存行为主要取决于HTTP响应中的Cache-ControlExpires头信息。这些库都有自己的配置选项,例如可以调整缓存大小或禁用缓存。
缓存文件不能保证一直存在直到它们过期,系统可以在任何时候清除它们。
如果您快速发起三个请求,则通常会成功,因为缓存既不是立即的也不是保证的。
总的来说:适当设置HTTP响应头,但不要依赖HTTP缓存来保证应用程序正常运行的某种方式。如果您想保证第二个请求实际上不会进行网络连接,那么需要自己编写。我认为Expo不会影响这一点。

1
太好了,回答得真快!当前的HTTP缓存规范在对性能敏感的情况下肯定不是100%可靠的,因此我们将采取额外的步骤来存储本地数据。 - ericjam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接