tg-me.com/iosdev/866
Last Update:
Измерение производительности приложений iOS в Uber: техники и советы
Для запуска приложения инженеры специально измеряют продолжительность холодного запуска приложения, которая состоит из создания первого процесса приложения, инициализации main.swift, различных сетевых вызовов для получения контента в реальном времени и первого прохода рендеринга для отрисовки экрана.
Это отличается от горячего запуска, когда приложение уже инициализировано в памяти и просто выведено на передний план из фона.
В дополнение к вышеперечисленному команда Uber создала конвейер данных для получения метрик частоты задержек и зависаний от Apple, что обеспечивает более глубокое понимание того, что происходит на уровне ОС.
📖 В этой исследовательской статье инженеры рассказывают, какие показатели производительности и какие инструменты и процессы были созданы.
Например, для измерения времени до main()
в приложении после создания процесса используется вызов ядра Mach
:C/C++
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
struct kinfo_proc kp;
size_t size = sizeof (kp);
// Time in Microseconds
kp.kp_proc.p_starttime.tv.sec * 1000000 + kp.kp_proc.p_starttime.tv_usec
Из интересных решений: данные MetricKit
не обрабатываются на клиенте, а отправляются в полуструктурированном формате JSON на серверную часть.
Грамотное исследование этих метрик позволяет определять, что сотни изменений кода и десятки функций не замедлят запуск приложения.
Кроме того, эти данные используются для оценки импакта тех или иных фич на скорость запуска, и, как следствие, непосредственного влияния на бизнес.