Интеграция Firebase Performance Monitoring в мобильное приложение
Профилировщик на девайсе разработчика показывает 60 fps. В Firebase Crashlytics — нет крашей. Но пользователи пишут «всё тормозит». Firebase Performance Monitoring — это инструментарий для замеров реального времени отклика на реальных устройствах пользователей, а не в лабораторных условиях.
Что измеряет Performance Monitoring
SDK автоматически собирает:
-
App start time — от вызова
applicationDidFinishLaunchingдо момента, когда приложение становится интерактивным -
Screen rendering — для каждого
UIViewControllerна iOS иActivity/Fragmentна Android: slow frames (>16 мс) и frozen frames (>700 мс) -
Network requests — время ответа, размер запроса/ответа, HTTP-статус для всех запросов через
URLSession/OkHttp
Сверх этого — кастомные трейсы для любого блока кода.
Подключение и кастомные трейсы
На iOS через Swift Package Manager или CocoaPods — добавляется FirebasePerformance. SDK инициализируется автоматически при старте FirebaseApp.configure().
Кастомный трейс для измерения тяжёлой операции:
import FirebasePerformance
func loadProductCatalog() async {
let trace = Performance.startTrace(name: "load_product_catalog")
defer { trace?.stop() }
trace?.setValue("v2", forAttribute: "api_version")
let products = await productRepository.fetchAll()
trace?.incrementMetric("product_count", by: Int64(products.count))
}
На Android / Kotlin:
val trace = Firebase.performance.newTrace("load_product_catalog")
trace.start()
trace.putAttribute("api_version", "v2")
val products = productRepository.fetchAll()
trace.putMetric("product_count", products.size.toLong())
trace.stop()
putAttribute позволяет сегментировать трейсы в консоли по произвольным параметрам — например, смотреть время загрузки отдельно для каждой версии API.
Сетевые запросы и кастомный NetworkInterceptor
Автоматический перехват запросов работает через swizzling URLSession на iOS. Если в проекте используется кастомная URLSession или Alamofire, может потребоваться ручная регистрация через HTTPMetric:
let metric = HTTPMetric(url: url, httpMethod: .get)
metric?.start()
URLSession.shared.dataTask(with: url) { data, response, error in
metric?.responseCode = (response as? HTTPURLResponse)?.statusCode ?? -1
metric?.stop()
}.resume()
Для Alamofire — добавляем EventMonitor, который оборачивает метрики вокруг каждого запроса.
Что смотреть в консоли
После интеграции в дашборде доступны:
| Метрика | Порог тревоги |
|---|---|
| App start time | > 2 сек — проблема |
| Slow frames | > 1% |
| Frozen frames | > 0.1% |
| Время сетевого запроса | Аномалии по перцентилям p50/p90/p95 |
Консоль показывает разбивку по версиям приложения, стране, типу устройства и OS. Это единственный способ узнать, что конкретный экран тормозит только на Android 10 на бюджетных устройствах.
Что входит в работу
- Добавление SDK и базовая инициализация
- Кастомные трейсы для ключевых операций (загрузка данных, рендер тяжёлых списков)
- Настройка перехвата сетевых запросов при нестандартном стеке
- Базовый дашборд с порогами алертов
Сроки
Базовая интеграция с автоматическими трейсами: 1 день. С кастомными трейсами под конкретные экраны и настройкой Network interceptor: 2 дня. Стоимость рассчитывается индивидуально.







