Производительность приложения для iOS
Производительность приложения для iOS
Мониторинг производительности приложения позволяет получить представление о том, как iOS-приложение отображается на экране. Это включает в себя время, необходимое приложению для подготовки к работе, какие экраны отображаются и как пользователи перемещаются между ними.
ЕдиныйАгент для iOS отслеживает этот процесс от первоначального запуска приложения до навигации между представлениями внутри приложения и до момента перевода приложения в фоновый режим или его завершения.
ЕдиныйАгент для iOS отслеживает следующие концепции и сохраняет их в виде событий в Хранилище данных:
- События запуска приложения — измерение времени запуска приложения и переходов в активный режим.
- Представления — это экраны, видимые пользователю.
- События навигации — это переходы между экранами и изменения состояний (например, запуск приложения и переход приложения в фоновый режим).
- Сводные данные по представлениям — это агрегированные события, создаваемые при завершении отображения представления, и суммирующие то, что произошло, пока представление было видимым.
Эти концепции соответствуют общей модели мобильного RUM, описанной в разделе «Концепции мобильного RUM». Определения см. в разделах «Запуск приложения», «Представления и сводки представлений» и «Навигация».
Каждое событие состоит из четко определенных полей типа «ключ-значение», как указано в Семантическом словаре для пользовательских событий, включая app_start.*, navigation.* и view.*.
Эти данные можно анализировать в таких приложениях, как Experience Vitals и Пользователи и сессии, или запрашивать напрямую в Хранилище данных с помощью DQL.
ЕдиныйАгент для iOS автоматически собирает информацию о запуске и жизненном цикле, регистрируясь для получения обратных вызовов жизненного цикла iOS (с помощью подмены методов UIKit через NotificationCenter). На основе этой информации ЕдиныйАгент может автоматически определять представления для подклассов UIViewController.
Для приложений SwiftUI инструментарий SwiftUI Instrumentor Ключ-АСТРОМ обеспечивает инструментирование на этапе сборки, автоматически захватывая представления при использовании шаблонов навигации, таких как NavigationLink, navigationDestination, sheet, popover и других. Для пользовательских сценариев, не охватываемых автоматическим инструментированием, представления можно захватывать вручную с помощью Astromkey.startView(...).
Событие запуска приложения
Событие App Start измеряет время, необходимое приложению для готовности после запуска или перехода в активный режим.
ЕдиныйАгент классифицирует запуск приложений на три типа: холодный, теплый и горячий (см. раздел «Запуск приложения» для определений и примеров).
В iOS классификация основывается на сигналах процесса и жизненного цикла UIApplication (например, был ли процесс создан впервые и было ли устройство недавно перезагружено).
Помимо того, что запуск приложения доступен в качестве события запуска, он также представлен как событие навигации (навигация без отображения исходного кода).
Как фиксируется запуск приложения
ЕдиныйАгент отслеживает запуск приложения на основе обратных вызовов жизненного цикла iOS, фиксируя последовательность фаз:
- Инициализация системы — время от создания процесса до загрузки
dyld. - Инициализация во время выполнения — время от загрузки
dyldдо инициализацииUIApplication. - Инициализация UIKit — время от начала инициализации
UIApplicationдо завершения процессаapplication(_:didFinishLaunchingWithOptions:). - Инициализация приложения — время от
didFinishLaunchingдоUIViewController.loadView. - Начальная отрисовка кадра — время от
loadViewдоapplicationDidBecomeActive.
Типы запуска приложений
ЕдиныйАгент для iOS различает три типа запуска приложений:
| Тип | Описание |
|---|---|
| Холодный | Эта ошибка возникает при перезагрузке устройства после последнего запуска или при первом запуске приложения. Процесс и все ресурсы приложения должны быть полностью инициализированы. |
| Теплый | Проблема возникает, когда приложение было ранее закрыто, но устройство не было перезагружено. При этом некоторые системные кэши могут оставаться доступными. |
| Горячий | Это происходит, когда приложение уже работало в фоновом режиме и выводится на передний план. Процесс возобновляется, а не создается заново. |
Обеспечьте точное измерение
Для фиксации полной продолжительности запуска приложения измерение должно начинаться как можно раньше. Для приложений с автоматической инструментацией ЕдиныйАгент начинает измерение с помощью методов подмены параметров жизненного цикла UIApplication и UIViewController. Если автоматический запуск отключен или агент запускается вручную, измерение начинается только при запуске агента. В этом случае вызов Astromkey.startup(...) как можно раньше (в идеале в application(_:didFinishLaunchingWithOptions:)) гарантирует точные результаты. В противном случае сообщаемая продолжительность может быть короче фактического времени запуска.
Событие навигации
Событие навигации представляет собой контекст перехода между представлениями или изменение видимого состояния приложения (см. «Навигация»).
Событие навигации может содержать:
- Исходный вид — вид, который был активен до перехода.
- Текущий вид — вид, который становится активным.
В большинстве случаев навигация выступает в качестве связующего звена между двумя представлениями.
Навигация генерируется как для автоматического отслеживания видов (переходы UIViewController), так и для ручного отслеживания видов (с помощью Astromkey.startView(...)).
Особые случаи
- Запуск приложения — навигация без отображения исходного кода.
- Изменение видимости на фоновый режим — навигация с исходным представлением, но без текущего представления.
Представления
В Ключ-АСТРОМ представление представляет собой экран, видимый пользователю (см. «Представления» и «Сводки представлений»).
Для получения справочной информации по этому полю см. раздел «Атрибуты представления».
ЕдиныйАгент автоматически отслеживает представления для подклассов UIViewController. Для приложений SwiftUI инструментарий SwiftUI Instrumentor обеспечивает автоматическое отслеживание представлений для компонентов, связанных с навигацией. Для других компонентов пользовательского интерфейса представления можно отслеживать вручную.
Одновременно может быть активен только один элемент интерфейса. Запуск нового элемента автоматически закрывает предыдущий и запускает событие навигации.
Пока приложение находится на переднем плане, ЕдиныйАгент для iOS поддерживает текущий контекст представления. Имя представления прикрепляется к событиям, автоматически перехватываемым (например, веб-запросам), и к событиям, создаваемым через API Ключ-АСТРОМ. Это обеспечивает контекст экрана, в котором произошло событие.
Автоматическое отслеживание представлений для UIKit
Для подклассов UIViewController ЕдиныйАгент захватывает представления на основе обратных вызовов жизненного цикла:
- Отображение начинается, когда
UIViewControllerвходит вviewDidAppear. - Вид заканчивается, когда
UIViewControllerвходит вviewDidDisappear.
ЕдиныйАгент автоматически обнаруживает контроллеры представлений внутри контроллеров контейнеров:
UINavigationController— отслеживает операции добавления и удаления.UITabBarController— отслеживает выбор вкладок.UISplitViewController— отслеживает изменения в контроллере детального представления.- Модальные презентации с помощью
present(_:animated:completion:)иdismiss(animated:completion:).
Автоматическое отслеживание представлений для SwiftUI
Для приложений SwiftUI инструментарий SwiftUI Instrumentor обеспечивает инструментарий на этапе сборки, который автоматически фиксирует состояние представлений.
Инструментарий SwiftUI Instrumentor автоматически отслеживает представления для следующих шаблонов навигации:
| Компонент | Описание |
|---|---|
NavigationLink |
Отслеживает целевой экран при навигации. |
navigationDestination |
Отображение треков осуществляется с помощью модификатора navigationDestination(for:destination:).
|
sheet |
Представление треков осуществляется в виде модальных окон. |
popover |
Отображение треков в виде всплывающих окон. |
TabView |
Выбор разделов вкладки «Треки» и соответствующие им представления. |
Menu |
Отслеживает жизненный цикл контейнера меню. |
Для получения дополнительной информации о настройке SwiftUI Instrumentor см. раздел «Инструментарий SwiftUI».
Отслеживание просмотров вручную
Для компонентов пользовательского интерфейса, которые не определяются автоматически (например, пользовательские контроллеры-контейнеры, встроенный контент или представления SwiftUI, не использующие поддерживаемые шаблоны навигации), используйте Astromkey.startView(...):
Swift
Astromkey.startView(name: "Login")
Objective-C
[Astromkey startViewWithName:@"Login"];
Вызов функции startView запускает новое представление и автоматически завершает предыдущее активное представление. Все последующие события оцениваются в контексте этого представления.
Отключение автоматического отслеживания представлений
Чтобы отключить автоматическое отслеживание представлений и полагаться исключительно на ручную настройку представлений, установите ключ конфигурации DTXInstrumentLifecycleMonitoring в значение false в файле Info.plist вашего приложения:
<key>DTXInstrumentLifecycleMonitoring</key> <false/>
Когда автоматическое отслеживание просмотра отключено:
- Представления отображаются только при вызове метода
Astromkey.startView(...). - События изменения видимости по-прежнему отправляются, когда приложение переходит в фоновый/активный режим.
Просмотреть сводку
Когда представление завершается, ЕдиныйАгент создает сводку представления — агрегированное событие, суммирующее все, что произошло за время существования представления (см. «Представления и сводки представлений»). Сводки представлений отображаются отдельно от других событий.
Что запечатлено
- Время начала — когда открылся вид.
- Продолжительность — как долго отображалось активное изображение.
- Количество ошибок — число ошибок, произошедших во время активности представления:
- Общее количество ошибок.
- Количество исключений.
- Количество ошибок HTTP 4xx.
- Количество ошибок HTTP 5xx.
- Количество других HTTP-ошибок.
- Количество ошибок других запросов.
Для получения справочной информации по полям см. раздел «Сводка просмотра».
Как это работает
Пока представление активно, ЕдиныйАгент отслеживает все события, происходящие в контексте этого представления. При обращении к системе Astromkey.sendHttpRequestEvent(...) или при сообщении об ошибках они автоматически связываются с текущим представлением.
Когда представление завершается (либо путем запуска нового представления, либо путем перехода приложения в фоновый режим), генерируется сводка по представлению, которая отправляется в Ключ-АСТРОМ.