0

我已经开始在后台运行时使用 Siesta,使用 Apple 的后台获取功能。以这种方式运行时要处理的(许多)困难之一是,在某些设备上,操作系统往往会经常终止我的进程。我试图让我的处理速度尽可能快并且尽可能节省电池,以便操作系统选择定期运行它。

据我了解,如果 Siesta 的内存缓存中没有数据(如果应用程序是新启动的),那么它会同时发出网络请求和持久缓存请求。在这种情况下,我经常在持久缓存中拥有非常好的非陈旧数据。我可以让 Siesta 在发出网络请求之前将该数据预加载到内存缓存中吗?然后我的代码使用更少的电池,它会定期运行,一切都很棒!

4

1 回答 1

0

碰巧的是,我自己在FileCache为 Siesta 进行预打包的实现时遇到了这个问题。我认为称其为错误是公平的。

当您第一次将资源放入内存时,Siesta 会异步触发缓存检查。这是应该的——我们不希望昂贵的数据加载阻塞 UI 线程——但loadIfNeeded()不等待缓存检查完成。

如果还没有数据,改进的设计loadIfNeeded()仍然会返回 a Request,但是让该请求是一个链式请求,首先检查缓存,然后检查网络。

与此同时,一个(非常丑陋的)解决方法是延迟您的loadIfNeeded()通话:

let resource = service.resource("whatever")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.05) {
  resource.loadIfNeeded()
}

更新:我已经为此提交了一个问题

于 2017-12-05T20:23:28.207 回答