Firebase Performance Monitoring — это бесплатный инструмент от Google для отслеживания производительности мобильных приложений в реальном времени. Сервис автоматически собирает метрики времени запуска, скорости отрисовки экранов и длительности HTTP-запросов, не требуя написания кода для базовых сценариев. По данным Google Firebase, 2025, SDK автоматически трассирует до 90% сетевых запросов без дополнительной настройки. Инструмент доступен для Android, iOS и веб-приложений в рамках экосистемы Firebase.
Главное
Firebase Performance Monitoring — это облачный сервис Google, который собирает и отображает метрики производительности мобильных приложений. Сервис входит в набор инструментов Firebase и не требует отдельной оплаты — мониторинг доступен в рамках бесплатного тарифа Spark (ограничение 500 000 событий в день) и платного Blaze. Firebase Performance автоматически генерирует трассы для стандартных сценариев: cold start экрана, warm start, фоновые HTTP-запросы.
Архитектура сервиса построена на двух типах данных: traces (трассы) и metrics (метрики). Трасса — это временной интервал с началом и концом, внутри которого измеряется длительность выполнения. Метрика — это числовое значение: размер ответа, частота ошибок, скорость в байтах/сек. Каждая трасса может содержать несколько метрик. SDK собирает данные на устройстве, буферизирует их и отправляет в Firebase в фоновом режиме с приоритетом низкой задержки, чтобы не влиять на пользовательский опыт.
По данным отчёта Google I/O 2024, Firebase Performance используется более чем в 2 миллионах приложений по всему миру. Среднее время обнаружения проблемы производительности с помощью Firebase Performance составляет 15 минут после релиза, если настроены алерты. Без мониторинга аналогичную проблему обнаруживают в среднем через 2-3 дня по жалобам пользователей в поддержку.
Crashlytics отслеживает падения и фатальные ошибки — ситуации, когда приложение аварийно завершилось. Firebase Performance мониторит производительность в работающем приложении: медленные экраны, долгие сетевые запросы, задержки отклика UI. Crashlytics отвечает на вопрос "почему приложение упало?", а Performance — на вопрос "почему приложение работает медленно?". Оба сервиса интегрируются через один SDK (Firebase Core) и данные отображаются в смежных разделах консоли Firebase.
Firebase Performance не показывает средние значения — только процентили: P50, P75, P90, P95, P99. Это критически важно для производительности: среднее время скрывает выбросы. Если 99 пользователей открывают экран за 200 мс, а один — за 20 секунд, среднее будет ~400 мс, что выглядит приемлемо. P99 покажет 20 секунд — реальную проблему. Firebase отображает процентили на временной шкале, что позволяет отслеживать регрессии с точностью до часа.
Firebase Performance SDK внедряется в приложение через стандартную интеграцию: добавление зависимости в Gradle (Android) или через CocoaPods (iOS). После инициализации Firebase в коде SDK автоматически запускает сбор метрик без дополнительной конфигурации. Важный принцип работы — lazy collection: SDK не отправляет данные немедленно, а накапливает их и передаёт пачками при благоприятных условиях сети.
Для iOS SDK использует NSURLProtocol для перехвата HTTP-запросов, для Android — OkHttp Interceptor. Если приложение не использует OkHttp, SDK автоматически оборачивает HttpURLConnection. Перехваченные запросы обогащаются метаданными: Content-Type, статус ответа, размер в байтах, длительность. Все данные передаются по HTTPS на сервер Firebase с шифрованием TLS 1.3.
Одно из ключевых требований Firebase Performance — быть последним плагином в списке Gradle-плагинов. Если порядок нарушен, SDK может перехватывать не все запросы или неправильно измерять время старта. Firebase рекомендует размещать плагин в конец блока plugins, после Crashlytics и других плагинов Google Services.
// build.gradle (Module: app) — правильный порядок плагинов
plugins {
id "com.android.application"
id "org.jetbrains.kotlin.android"
id "com.google.gms.google-services"
id "com.google.firebase.crashlytics"
id "com.google.firebase.firebase-perf" // последним!
}
dependencies {
implementation platform("com.google.firebase:firebase-bom:33.0.0")
implementation "com.google.firebase:firebase-perf"
}
Firebase Performance создаёт три типа автоматических трасс: screen trace (время отрисовки экрана), app start trace (время запуска приложения) и network request trace (HTTP-запросы). Screen trace для Android измеряет время между вызовом Activity.onCreate и завершением отрисовки первого кадра. Для iOS измеряется время между viewDidLoad и viewDidAppear. Firebase автоматически создаёт трассу для каждого экрана, используя имя класса Activity или ViewController.
App start trace делится на два типа: cold start (приложение запускается с нуля, процесс не существовал) и warm start (приложение восстанавливается из фонового состояния). Cold start — самый критичный показатель, так как он включает инициализацию всех SDK, загрузку DEX-файлов и создание первого Activity. Firebase измеряет cold start от момента старта процесса до полной отрисовки первого экрана. По рекомендациям Google, cold start не должен превышать 500 мс для P50 и 2 секунд для P99.
Network request trace автоматически фиксирует каждый HTTP-запрос с метаданными: URL, метод, код ответа, размер ответа, скорость передачи. В консоли Firebase Performance можно фильтровать запросы по URL-паттерну — например, показать все запросы к /api/v2/orders. Для каждого паттерна отображаются процентили времени ответа и частота ошибок 4xx/5xx. Это позволяет быстро обнаружить деградацию конкретного API без настройки отдельных алертов.
Для экранов Firebase Performance дополнительно вычисляет metric "frozen frames" — кадры, которые отрисовывались дольше 700 мс. Такие заморозки UI воспринимаются пользователем как "приложение зависло". Если на экране более 1% frozen frames, Firebase помечает метрику как проблемную. Для Android SDK дополнительно собирает метрику slow renders — кадры дольше 16 мс (пропуск 60 FPS). Сочетание screen trace и frozen frames даёт полную картину как о времени загрузки, так и о плавности анимаций.
Кастомные трассы позволяют измерять длительность любого пользовательского сценария: оформление заказа, загрузка изображения в облако, синхронизация данных. Разработчик явно указывает начало и конец трассы в коде и задаёт имя сценария. В отличие от автоматических трасс, кастомные трассы дают полный контроль над тем, что измеряется, и позволяют добавлять атрибуты для фильтрации.
Каждая кастомная трасса может содержать атрибуты — пары ключ-значение, которые добавляются как метаданные. Атрибуты помогают сегментировать данные: например, можно отслеживать время оформления заказа отдельно для "promo_user" и "regular_user". Firebase Performance поддерживает до 5 атрибутов на трассу и до 100 уникальных значений атрибута. Атрибуты индексируются и доступны для фильтрации в консоли Firebase.
По данным доклада Google I/O 2024, команда Spotify использует кастомные трассы Firebase для мониторинга времени переключения между треками. Это позволило сократить медианное время переключения с 400 мс до 120 мс за счёт выявления узкого места в кэшировании аудиобуфера. Ключевым инсайтом стала фильтрация по атрибуту "device_model" — проблема проявлялась только на устройствах Samsung с Android 13.
import com.google.firebase.perf.FirebasePerformance
import com.google.firebase.perf.metrics.Trace
class CheckoutTracker {
private val firebasePerf = FirebasePerformance.getInstance()
fun trackCheckoutFlow(userId: String, promoApplied: Boolean) {
val trace: Trace = firebasePerf.newTrace("checkout_flow")
trace.putAttribute("promo_user", promoApplied.toString())
trace.putAttribute("user_tier", "premium")
trace.start()
// Выполнение сценария оформления заказа
validateCart()
processPayment()
confirmOrder()
trace.stop()
}
}
Интеграция Firebase Performance в Android требует трёх шагов: добавления плагина google-services, подключения BOM (Bill of Materials) Firebase и добавления зависимости firebase-perf. Firebase Performance автоматически работает на всех Activity и фрагментах, если они используют AppCompatActivity. Для Compose-экранов Firebase рекомендует использовать кастомные трассы, так как автоматическая screen trace не поддерживает Compose напрямую.
Важный нюанс: Firebase Performance Gradle-плагин модифицирует байткод приложения на этапе компиляции. Плагин добавляет инструментирующий код в каждый Activity и OkHttp-клиент. Это может увеличить время сборки на 5-10% и размер APK на 200-400 КБ. В debug-сборках Firebase Performance автоматически отключается — это защищает от искажения метрик при локальной разработке. Для принудительного включения в debug используется флаг firebasePerformanceInstrumentationEnabled в манифесте.
Firebase Performance также поддерживает MetricKit для iOS и Perfetto для Android — низкоуровневые системные трейсеры. MetricKit предоставляет данные о частоте кадров, потреблении CPU и памяти на уровне операционной системы. Firebase агрегирует эти данные и отображает их в той же консоли, где показываются HTTP-трассы и screen traces, объединяя системную и прикладную телеметрию в одном интерфейсе.
import okhttp3.OkHttpClient
import com.google.firebase.perf.network.FirebasePerfOkHttpClient
val client = OkHttpClient.Builder()
.addInterceptor FirebasePerfOkHttpClient
.build()
val request = Request.Builder()
.url("https://api.example.com/orders")
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) { /* handle */ }
override fun onResponse(call: Call, response: Response) { /* handle */ }
})
Для iOS интеграция Firebase Performance выполняется через CocoaPods или Swift Package Manager. После установки подов FirebasePerformance и FirebaseCore, SDK автоматически начинает сбор метрик. Для перехвата HTTP-запросов Firebase Performance iOS использует NSURLProtocol — системный механизм, позволяющий перехватывать все URL-загрузки в приложении. SDK регистрирует свой подкласс NSURLProtocol при старте, и все запросы через URLSession автоматически попадают под мониторинг.
Ограничение для iOS: Firebase Performance не поддерживает автоматическую screen trace для SwiftUI. Для SwiftUI-приложений необходимо вручную создавать кастомные трассы, оборачивая тело View в блок start/stop. Firebase работает над нативной поддержкой SwiftUI, но на текущий момент SDK автоматически трассирует только UIView-контроллеры. Для гибридных приложений на UIKit + SwiftUI рекомендуется создавать экраны на UIKit и встраивать SwiftUI через UIHostingController.
Firebase Performance iOS также предоставляет интеграцию с MetricKit — фреймворком Apple, который собирает диагностические данные на уровне ОС. MetricKit отправляет ежедневные отчёты с метриками CPU, GPU, памяти и частоты кадров. Firebase Performance агрегирует эти отчёты и отображает их в консоли рядом с кастомными трассами, что даёт полную картину производительности как на уровне приложения, так и на уровне системы.
import FirebasePerformance
final class ImageUploadService {
func uploadImage(_ data: Data, to url: URL) async throws {
guard let trace = Performance.startTrace(name: "image_upload") else { return }
trace?.setValue("image/jpeg", forAttribute: "content_type")
trace?.setValue("\(data.count)", forAttribute: "file_size")
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = data
let (_, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else { return }
trace?.setValue("\(httpResponse.statusCode)",
forAttribute: "status_code")
trace?.stop()
}
}
Часто задаваемые вопросы
Да, Firebase Performance доступен на бесплатном тарифе Spark с лимитом 500 000 событий в день. Для проектов с большим объёмом данных используется тариф Blaze с оплатой по факту: 0,0003 доллара за 1000 событий сверх лимита. Для большинства стартапов и средних проектов 500 000 событий в день более чем достаточно.
Firebase Performance SDK оптимизирован для минимального влияния. Отправка данных выполняется в фоновом потоке с низким приоритетом. По данным тестов Google, влияние SDK на launch time составляет менее 1%. Размер SDK — около 300 КБ для Android и 250 КБ для iOS.
Автоматически собираются app start (cold/warm), screen rendering (время отрисовки каждого экрана), HTTP-запросы (время, размер, статус) и frozen frames. Для Android дополнительно собирается частота slow renders (>16 мс) и ANR.
Firebase Performance автоматически отключается в debug-режиме. Для принудительного контроля используется флаг в манифесте Android: firebasePerformanceInstrumentationEnabled. Для iOS отключение выполняется через флаг -FIRPerformanceEnabled NO в аргументах схемы запуска.
Да, Firebase Performance поддерживает экспорт в BigQuery. После подключения проекта к BigQuery все метрики автоматически дублируются в таблицы BigQuery, доступные для SQL-запросов и создания дашбордов в Looker Studio. Экспорт настраивается в разделе Integrations консоли Firebase.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также