Должен ли я добавить отслеживание в начале или конце функции - PullRequest
0 голосов
/ 18 марта 2020

Допустим, у нас есть специальная аналитическая библиотека для отслеживания просмотров экрана и действий пользователей. Учитывая следующие варианты.

// Option A
func buyButtonTap() {   
    doSomething()
    doSomethingElse()
    Analytics.track(event: .buy)
}

// Option B
func buyButtonTap() {   
    Analytics.track(event: .buy)
    doSomething()
    doSomethingElse()
}

Какой вариант вы бы предпочли? Это имеет значение вообще? Мы должны учитывать следующее:

1) Наша библиотека приложений и аналитики использует как сетевое взаимодействие в реальном времени, так и потоковую передачу данных.
2) Процедуры «сделать что-то» могут быть сложными и дорогостоящими.

Лично я считаю, что отслеживание должно произойти в конце процедуры. И причина в том, что добавление отслеживания в начале может добавить немного задержки в приложение, когда ресурсов не хватает.

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Так, например, это зависит.

, если butbuttonTap () - это операция, которая обрабатывает операцию касания, тогда вам следует использовать опцию A

// Option A
func buyButtonTap() {   
    doSomething()
    doSomethingElse()
    Analytics.track(event: .buy)
}

, но если butbuttonTap () включает в себя размещение заказа затем покупайте предметы перед операцией, так как она может обработать sh без завершения doSomething () и doSomethingElse (). затем используйте

// Option B
    func buyButtonTap() {   
        Analytics.track(event: .buy)
        doSomething()
        doSomethingElse()
    }

В идеальном случае нужно разбить ваш метод на маленькие части и сделать вашу структуру похожей на опцию A, то есть в конце вызвать аналитику. в качестве аналитики обычно используется didBuy или didTapBuy.

0 голосов
/ 18 марта 2020

Отслеживание не о главном потоке, это задание забыть о пожаре. Я думаю, что вы должны вызвать функцию отслеживания в фоновом потоке и не беспокоиться о задержке основного потока.

func buyButtonTap() {
    DispatchQueue.global(qos: .background).async {
        Analytics.track(event: .buy)
    }
    doSomething()
    doSomethingElse()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...