什么更便宜?
1. 附加到该位置,直到值不为零或
2. 反复获取该位置,直到值不为零。
重复获取返回nil会导致协议开销调用(例如http或ssl)。一个理论上的例子:假设我从一个不存在的位置获取了10亿次(有价值为零)。谷歌会收取这些电话的费用吗?
另一个理论:假设有10亿部手机每次拨打一个零值。谷歌会对此收费吗?
我一直在附近这个位置,但决定重复获取数据。
我运行的代码(转为伪):
func recursiveFetch() {
Log.test("Another call")
firebaseFetch(withKey: "abc123") { (data: [String:Any]) in
if data != nil {
//complete
} else {
recursiveFetch()
}
}
}
结果:
使用普通的wifi,它会在获得结果之前递归进行9次调用。
Persistance Off normal Wifi
19:58:10.721 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:10.842 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:10.931 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.051 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.118 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.235 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.316 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.427 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.499 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
使用高延迟wifi,需要2次通话。
persistance off high latency
19:59:06.655 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:59:06.737 TEST ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
是否连续9次调用nil位置,然后最终获得的结果是第10次尝试更多或更少比附加到该位置更贵?
答案 0 :(得分:0)
您只想在工作完成后聆听您知道将要更改的位置,然后停止聆听。其他任何事都浪费时间和代码。