实验:iOS网络缓存

现在一段时间以来,我一直在进行网络架构方面的实验。 我已经按照自己的喜好构建了一个,它提供了灵活性和可读性。 我缺少的第一步是持久层。

具有强大的持久层,随后对同一网络资源的调用可以依赖于存储的数据,而不是浪费数据和时间。 对我们来说幸运的是,如果您使用URLSession则默认配置已使用NSURLRequestUseProtocolCachePolicy 。 它是这样的:

  1. 如果没有存储响应,它将从网络中获取内容。
  2. 如果存储了一个响应并且它是有效的,它将使用该响应。
  3. 如果存在已存储的响应并且该响应无效,它将从网络获取以使用并也会更新已存储的响应。

除了存在一个问题外,它还很整洁:并非所有服务器都能正常运行并提供cache header 。 没有它,它将不会存储在缓存中。 我们还有另一种情况,其中存在高速缓存头,但表示为: no-cache 。 在大多数情况下,我们应该尊重所提供的缓存控制标头,因为服务器应该知道最适合它们所提供的内容。

我遇到了Hacker News Top Stories Endpoint的no-cache标头,这很有意义,因为它是根据投票不断变化的新闻列表。 这就是该帖子被称为“ 实验”的原因。 虽然可以使用,但我不建议在生产应用中使用它。 有更好的缓存数据的方法,但是如果您急于需要快速的默认缓存,则可以选择这种方法。

在本实验中,我使用了https://hacker-news.firebaseio.com/v0/topstories.json端点。

单个请求:

我试图对同一网络资源执行多个请求:

然后使用缓存头修改获取相同的资源100次: