假设我们有自定义分析库来跟踪屏幕视图和用户操作。考虑以下选项。
// Option A
func buyButtonTap() {
doSomething()
doSomethingElse()
Analytics.track(event: .buy)
}
// Option B
func buyButtonTap() {
Analytics.track(event: .buy)
doSomething()
doSomethingElse()
}
你更喜欢哪个选项?这有关系吗?我们必须考虑以下内容:
1( 我们的应用程序和分析库都使用实时网络和数据流
2("有所作为"的过程可能既复杂又昂贵。
就我个人而言,我认为追踪应该在程序结束时进行。原因是,在资源稀缺的情况下,一开始添加跟踪会给应用程序增加一些滞后。
跟踪与主线程无关,它是一个fire forget任务。我认为你应该在后台线程中调用跟踪函数,不要担心主线程滞后。
func buyButtonTap() {
DispatchQueue.global(qos: .background).async {
Analytics.track(event: .buy)
}
doSomething()
doSomethingElse()
}
所以这取决于例如。
如果butbuttonTap((是一个处理点击操作的操作,那么你应该使用选项a
// Option A
func buyButtonTap() {
doSomething()
doSomethingElse()
Analytics.track(event: .buy)
}
但是如果butbuttonTap((包括下订单购买物品,那么你应该在操作之前包括,因为它可能会在没有完成doSomething((和doSometingElse((的情况下崩溃。然后使用
// Option B
func buyButtonTap() {
Analytics.track(event: .buy)
doSomething()
doSomethingElse()
}
理想的情况是将您的方法分割成小部分,并使您的结构类似于选项A,即在最后调用分析。分析通常被用作didBuy或didTapBuy