什么是React Native的获取缓存行为

时间:2018-08-18 02:17:17

标签: react-native fetch expo http-caching

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

让我说:fetch("https://exampleserver.com/myfile.json")

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

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

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

    • 如果是,我可以请求缓存保留吗?
  • iOS中的这种行为是否与Android不同?

  • 世博会对此有影响吗?

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

1 个答案:

答案 0 :(得分:2)

React Native的- (IBAction)buttonTap:(UIButton *)sender { if (self.theView) { [self.stackView removeArrangedSubview:self.theView]; [self.theView removeFromSuperview]; self.theView = nil; } else { self.theView = [[[NSBundle mainBundle] loadNibNamed:@"SomeView" owner:nil options:nil] firstObject]; self.theView.translatesAutoresizingMaskIntoConstraints = NO; [self.stackView addSubview:self.theView]; [self.stackView insertArrangedSubview:self.theView atIndex:0]; self.theView.viewHeightConstraint.constant = 95; } } API桥接到iOS上的fetch和Android上的NSURLSession。这两个库都严格遵循HTTP缓存规范。缓存行为将主要取决于HTTP响应中的okhttp3Cache-Control标头。这些库中的每一个都有自己可以调整的配置,例如,控制缓存大小或禁用缓存。

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

如果您真的非常快地发出三个请求,那么总的来说,您将成功,因为缓存既不立即也不保证。

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

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