React Native 对 fetch 的缓存行为是什么
What are React Native's caching behaviors for fetch
目前 React Native 在 fetch
调用中缓存的默认行为是什么?官方 FB 指南只是说 "look at Mozilla!" 但我们不是在网络浏览器上。由于中间件的原因,我假设这里的缓存行为是自定义的。
假设我愿意:fetch("https://exampleserver.com/myfile.json")
请求是否在调用后自动缓存?
myfile.json
的请求内容是否缓存了整个"session"(即:App是运行active/bg,但没有被用户强行关闭).
- 请求缓存在哪里?即:是否使用
AsyncStorage
-
fetch
URL 是否会再次导致应用程序读取缓存。
- "fast" 是如何缓存的,如果出于某种原因我必须立即多次请求
myfile.json
,它是否会在那时基本上忽略缓存并进行所有这些单独的调用? (我在调试器中看到了这种行为)
当我强制关闭应用程序并重新打开时,此缓存是否仍然存在?
- 如果是这样,我可以请求缓存持久化吗?
iOS 与 Android 中的此行为有何不同?
世博会对此有影响吗?
至少了解其中的一些内容将有助于决定我是否需要像这样使用 AsyncStorage 编写自定义缓存情况 https://gist.github.com/dslounge/18e555250a8df1f8218d702b21910eeb
React Native 的 fetch
API 桥接到 iOS 上的 NSURLSession
和 Android 上的 okhttp3
。这两个库都严格遵循 HTTP 缓存规范。缓存行为将主要取决于 HTTP 响应中的 Cache-Control
和 Expires
headers。这些库中的每一个都有自己可以调整的配置,例如控制缓存大小或禁用缓存。
缓存的文件不能保证在过期之前一直存在。系统可以随时清除它们。
如果你真的很快发出三个请求,那么通常你会成功,因为缓存既不是立即的也不是保证的。
总的来说:适当地设置您的 HTTP 响应 headers,但不要依赖 HTTP 缓存以某种方式运行以确保您的应用程序正常运行。如果你想保证第二个请求实际上不会建立网络连接,你需要自己写。
我认为世博会不会影响这一点。
目前 React Native 在 fetch
调用中缓存的默认行为是什么?官方 FB 指南只是说 "look at Mozilla!" 但我们不是在网络浏览器上。由于中间件的原因,我假设这里的缓存行为是自定义的。
假设我愿意:fetch("https://exampleserver.com/myfile.json")
请求是否在调用后自动缓存?
myfile.json
的请求内容是否缓存了整个"session"(即:App是运行active/bg,但没有被用户强行关闭).- 请求缓存在哪里?即:是否使用
AsyncStorage
-
fetch
URL 是否会再次导致应用程序读取缓存。 - "fast" 是如何缓存的,如果出于某种原因我必须立即多次请求
myfile.json
,它是否会在那时基本上忽略缓存并进行所有这些单独的调用? (我在调试器中看到了这种行为)
- 请求缓存在哪里?即:是否使用
当我强制关闭应用程序并重新打开时,此缓存是否仍然存在?
- 如果是这样,我可以请求缓存持久化吗?
iOS 与 Android 中的此行为有何不同?
世博会对此有影响吗?
至少了解其中的一些内容将有助于决定我是否需要像这样使用 AsyncStorage 编写自定义缓存情况 https://gist.github.com/dslounge/18e555250a8df1f8218d702b21910eeb
React Native 的 fetch
API 桥接到 iOS 上的 NSURLSession
和 Android 上的 okhttp3
。这两个库都严格遵循 HTTP 缓存规范。缓存行为将主要取决于 HTTP 响应中的 Cache-Control
和 Expires
headers。这些库中的每一个都有自己可以调整的配置,例如控制缓存大小或禁用缓存。
缓存的文件不能保证在过期之前一直存在。系统可以随时清除它们。
如果你真的很快发出三个请求,那么通常你会成功,因为缓存既不是立即的也不是保证的。
总的来说:适当地设置您的 HTTP 响应 headers,但不要依赖 HTTP 缓存以某种方式运行以确保您的应用程序正常运行。如果你想保证第二个请求实际上不会建立网络连接,你需要自己写。
我认为世博会不会影响这一点。