1

Siesta中是否可以使用如下缓存策略:

  • 仅限本地
  • 网络优先

其中LocalOnly仅从本地缓存中获取数据,而NetworkFirst正在从网络中获取数据,如果失败,则从本地缓存中检索。

4

2 回答 2

3

如果您想控制将URLSession其用作 Siesta 的底层网络库时的缓存行为,@nikano 的答案是正确的。

一般来说,Siesta 让底层网络做它的事情。URLSession即使您将其与 Siesta 一起使用,有效的选项也保持不变。


Siesta本身就是一个可观察的内存缓存。它的核心设计功能之一是它让您可以细粒度地控制您看到的、缓存的或新鲜的数据——这至关重要,这不是一个非此即彼的问题。您可以同时使用两者。

如果您想查看本地缓存在内存中的数据,您的“仅限本地”,只需请求资源即可:

resource.latestData

如果你想强制一个网络请求,即使有缓存的数据,即你的“仅限网络”:</p>

resource.load().onSuccess { ...use the data... }

…如果由于某种原因您想要请求最新数据但没有Siesta 缓存它:

resource.request(.get).onSuccess { ... }

然而,最常见的习惯用法是同时使用缓存数据和新数据:

resource.addObserver(somethingObserverThatUsesTheData)
resource.loadIfNeeded()

在这种情况下,somethingObserverThatUsesTheData首先查看本地缓存的数据(如果有),然后查看从网络库返回的数据(如果有网络请求)。


请注意,从网络库返回的数据本身可能会被缓存。在大多数情况下,我建议禁用URLSession的缓存,以便您知道您正在获取最新数据。但是,在某些情况下,拥有两层缓存可能是正确的。

于 2018-03-07T02:52:40.207 回答
1

是的,您可以使用URLSessionConfiguration

let configuration = URLSessionConfiguration.default
    configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders

// cache policy
configuration.requestCachePolicy = .reloadIgnoringLocalCacheData

缓存策略是一个在 中定义的枚举NSURLRequest,我相信您可以在那里找到您正在寻找的选项。

对于localOnly您可以使用的选项:.returnCacheDataDontLoad

对于networkFirst选项,也许该选项.reloadIgnoringLocalCacheData很适合您

于 2018-03-06T15:55:25.580 回答