Monitorowanie wydajności to ciągły proces zbierania i analizy metryk działania aplikacji w celu wykrywania spowolnień, wycieków pamięci i nieoptymalnego wykorzystania zasobów. Według Android Performance Guide, 2025, monitorowanie pozwala wykryć odchylenia metryk na wczesnym etapie i zapobiec degradacji doświadczenia użytkownika zanim pojawią się masowe skargi.
Najważniejsze
Monitorowanie wydajności to praktyka ilościowej oceny zachowania aplikacji poprzez zbieranie metryk czasu wykonania, wykorzystania pamięci, liczby klatek na sekundę i zużycia energii. W przeciwieństwie do raportowania crashy, które rejestruje tylko krytyczne awarie, monitorowanie wydajności śledzi stopniową degradację: aplikacja działa, ale wolniej niż powinna.
Według Google (2024), 53% użytkowników zamyka aplikację, jeśli ładuje się dłużej niż 3 sekundy. Każda dodatkowa sekunda opóźnienia zmniejsza konwersję średnio o 20% w różnych kategoriach. To sprawia, że monitorowanie wydajności jest nie tylko praktyką techniczną, ale koniecznością biznesową dla produktów mobilnych.
Nowoczesne monitorowanie wydajności obejmuje cztery poziomy: klient (iOS, Android), sieć (zapytania API, WebSocket), usługi backendowe i infrastruktura. W rozwoju aplikacji mobilnych nacisk kładzie się na metryki klienckie, ponieważ to właśnie na urządzeniu użytkownika pojawia się większość problemów z wydajnością.
Do pełnego monitorowania należy śledzić pięć grup metryk, z których każda odpowiada za inny aspekt doświadczenia użytkownika. FPS (frames per second) pokazuje płynność animacji i przewijania — wartość poniżej 30 klatek na sekundę jest odczuwalna jako spowolnienie.
Czas zimnego startu aplikacji — od momentu dotknięcia ikony do pełnej gotowości interfejsu. Czas gorącego startu — powrót z tła. Czas odpowiedzi na działanie użytkownika (tap-to-response). Czas uruchamiania dla Androida mierzony jest przez ActivityManager, dla iOS — przez dyld i czas premain. Według Firebase Performance, mediana czasu zimnego startu dla 100 najpopularniejszych aplikacji wynosi 1,8 sekundy.
Zużycie pamięci RAM nie powinno przekraczać 80% dostępnego wolumenu na urządzeniu, w przeciwnym razie system zaczyna wyładowywać aplikację z tła. Ślad pamięciowy jest śledzony przez Xcode Instruments (iOS) i Android Profiler. Wycieki pamięci wykrywane są poprzez wzrost zużycia przy powtarzających się operacjach — na przykład przechodzeniu między ekranami.
Czas wykonania zapytania HTTP, rozmiar odpowiedzi, częstotliwość timeoutów i błędów. Opóźnienie sieciowe jest szczególnie krytyczne dla aplikacji mobilnych działających w warunkach niestabilnego połączenia (3G, metro, winda, roaming). Zaleca się śledzenie czasu odpowiedzi p95 — właśnie on pokazuje doświadczenie najbardziej „wymagających” użytkowników z najgorszymi warunkami sieciowymi.
| Metryka | Norma | Krytyczne |
|---|---|---|
| Cold start | do 2 s | powyżej 4 s |
| FPS | 55–60 | poniżej 30 |
| API response | do 500 ms | powyżej 2 s |
| Memory usage | do 200 MB | powyżej 400 MB |
| ANR rate | poniżej 0,1% | powyżej 0,5% |
Real User Monitoring (RUM) zbiera dane z rzeczywistych urządzeń użytkowników w środowisku produkcyjnym. Ta metoda pokazuje faktyczne opóźnienia, których doświadczają użytkownicy, biorąc pod uwagę ich urządzenia, wersje systemu operacyjnego, sieć i geolokalizację. RUM daje najdokładniejszy obraz wydajności, ale zależy od tego, jacy użytkownicy trafili do próbki.
Synthetic Monitoring natomiast wykonuje wcześniej zdefiniowane scenariusze na urządzeniach testowych w kontrolowanych warunkach. Pozwala wykryć regresję zanim trafi do użytkowników i odtwarzać problemy w jednolitym środowisku. Firebase Test Lab i BrowserStack udostępniają testy syntetyczne na rzeczywistych urządzeniach bez ręcznego uruchamiania.
Optymalna strategia to kombinacja obu podejść: testy syntetyczne wykrywają regresje na etapie CI, a RUM daje rzeczywisty obraz w produkcji. Według Datadog (2024), zespoły korzystające z obu metod wykrywają o 35% więcej problemów z wydajnością, zanim staną się incydentami.
Firebase Performance Monitoring to darmowe narzędzie od Google do zbierania metryk wydajności na iOS i Android. Automatycznie mierzy czas uruchamiania aplikacji, zapytania HTTP i renderowanie ekranów bez konieczności pisania kodu. Do instalacji wystarczy dodać SDK do projektu i aktywować moduł Performance w konsoli Firebase.
Po podłączeniu SDK Firebase Performance automatycznie tworzy trace dla każdego zapytania HTTP przez URLSession (iOS) lub OkHttp (Android). Renderowanie ekranów jest mierzone dla UIViewController i Activity, rejestrując czas od onCreate/viewDidLoad do zakończenia pierwszego renderowania. Wszystkie metryki są agregowane w konsoli Firebase z podziałem na wersje aplikacji, urządzenia i kraje.
import com.google.firebase.perf.FirebasePerformance
import com.google.firebase.perf.metrics.Trace
class PaymentService {
private val firebasePerf = FirebasePerformance.getInstance()
fun processPayment(amount: Double) {
val trace = firebasePerf.newTrace("payment-flow")
trace.start()
trace.putAttribute("amount", amount.toString())
// przetwarzanie płatności
trace.stop()
}
}
Kod tworzy niestandardowy trace dla scenariusza płatności z atrybutem kwoty. Po tym tracie w konsoli Firebase można zobaczyć medianę i p95 czasu realizacji płatności, pogrupowane według wersji aplikacji i urządzeń.
Firebase automatycznie przechwytuje zapytania sieciowe i rejestruje URL, kod odpowiedzi, rozmiar payloadu i czas wykonania. Dla OkHttp na Androidzie automatyczna instrumentacja działa bez dodatkowej konfiguracji. Zapytania sieciowe są wyświetlane w konsoli z grupowaniem według endpointów, co pozwala szybko wykryć spowolnienie konkretnego API.
Standardowe metryki pokrywają ogólną wydajność, ale do diagnostyki procesów biznesowych wymagana jest instrumentacja konkretnych scenariuszy. Niestandardowe trace pozwalają zmierzyć czas wykonania uwierzytelniania, ładowania kanału wiadomości, przetwarzania obrazu lub synchronizacji danych.
Każdy niestandardowy trace powinien mieć znaczącą nazwę w formacie „scenariusz-działanie” i zawierać atrybuty do filtrowania. Na przykład trace „image-upload” z atrybutami „file_size” i „compression_quality” pozwoli wykryć zależność czasu ładowania od rozmiaru obrazu. Zaleca się nie tworzyć więcej niż 20 niestandardowych trace na jeden ekran — nadmierna instrumentacja tworzy szum i utrudnia analizę.
import FirebasePerformance
func trackImageUpload(data: Data) {
let trace = Performance.startTrace(name: "image-upload")
trace?.setValue(data.count, forAttribute: "file_size")
trace?.setValue("high", forAttribute: "compression")
// ładowanie obrazu
trace?.stop()
}
Przykład w Swift tworzy trace dla ładowania obrazu z atrybutami rozmiaru pliku i poziomu kompresji. W konsoli Firebase te atrybuty stają się polami do grupowania i filtrowania metryk.
Zbieranie metryk bez systemu powiadomień jest bezużyteczne. Alerting powinien informować zespół o przekroczeniu dopuszczalnych granic metryk, przy czym progi alarmowe dzielą się na trzy poziomy: ostrzeżenie (warning), krytyczny (critical) i awaryjny (outage). Każdy poziom określa kanał powiadomienia: warning — na kanał Slack zespołu, critical — do PagerDuty dyżurnego inżyniera, outage — masowe powiadomienie wszystkich zainteresowanych.
Dla metryk mobilnych zaleca się stosowanie dynamicznych progów opartych na percentylach: p95 czasu zimnego startu przekracza 4 sekundy — alert krytyczny. Statyczne progi (np. CPU > 90%) działają gorzej, ponieważ nie uwzględniają normalnych wahań obciążenia w zależności od pory dnia i dnia tygodnia. Firebase Performance obsługuje konfigurację alertów przez Firebase Console z wysyłką do Slack, PagerDuty i poczty elektronicznej z możliwością eskalacji w przypadku braku potwierdzenia.
Według Incident Management Survey (2024), zespoły, które konfigurują alerty w oparciu o percentyle, a nie średnie, przegapiają o 45% mniej incydentów. Wartość średnia (average) wygładza skoki — p95 gwarantowanie pokazuje najgorszy scenariusz dla użytkowników, niezależnie od pory dnia i sezonowych wahań obciążenia.
Często zadawane pytania
Podstawowe narzędzia: Firebase Performance Monitoring (darmowe, podstawowa funkcjonalność), Dynatrace (korporacyjny RUM), New Relic Mobile, Datadog RUM i Instabug (specjalizacja w aplikacjach mobilnych). Wybór zależy od budżetu i wymaganej głębokości analizy.
Metryki powinny być zbierane i wyświetlane na dashboardzie w czasie rzeczywistym z opóźnieniem nie większym niż 5 minut. Analizowanie trendów zaleca się raz w tygodniu. Automatyczne alerty powinny uruchamiać się przy przekroczeniu progów bez udziału człowieka — to jedyny sposób reagowania na problemy, zanim zauważą je użytkownicy.
Minimalny zestaw: czas zimnego startu, FPS, wskaźnik ANR (Android) lub zakończenia watchdog (iOS), wskaźnik błędów HTTP i zużycie pamięci. To wystarczy do wykrycia 80% problemów wydajnościowych w typowym projekcie mobilnym. W miarę rozwoju aplikacji dodawane są metryki konkretnych ekranów i scenariuszy biznesowych dla dokładniejszej diagnostyki.
Tak, SDK do monitorowania wydajności dodaje 1–3 MB do rozmiaru aplikacji w zależności od narzędzia. Firebase Performance Monitoring dodaje około 1,2 MB. Zaleca się włączanie SDK tylko w kompilacjach testowych i produkcyjnych, wykluczając je z kompilacji debugowych.
Jeśli czas oczekiwania na odpowiedź API jest wysoki, ale metryki serwerowe są w normie — problem leży po stronie klienta (sieć urządzenia, DNS, uzgadnianie TLS). Jeśli serwer pokazuje wysokie obciążenie lub wolne zapytania do bazy danych — problem leży po stronie backendu. Distributed tracing daje jednoznaczną odpowiedź, łącząc zapytanie klienckie z przetwarzaniem po stronie serwera.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również