App performance: metriche chiave
Una performance scadente uccide la retention più di qualsiasi bug. Le metriche giuste, monitorate continuamente, permettono di prevenire degradi e individuare regressioni. Vediamo le metriche fondamentali da seguire in produzione.
Cold start e warm start
Cold start (avvio da zero): obiettivo <2s su Android, <1,5s su iOS. Warm start: <500ms. Una latenza elevata in startup riduce drasticamente la retention. Misurabile con Android Vitals, Firebase Performance, Xcode Instruments.
Frame rate e jank
Mantenere 60 (o 120) fps significa non perdere frame durante lo scrolling o le animazioni. Il "jank" e ogni frame perso oltre il budget di 16ms. Su Android Vitals e Firebase Performance segnalano frame frozen (>700ms) e slow frame (>16ms). Su iOS l'utility Hitches in Xcode 13+ misura jank simili.
Network e batteria
Latency media, errori, payload size, dimensione delle immagini. La batteria si misura con powermetrics, batterystats e con percentuali consumate per ora. Apps che bruciano batteria perdono utenti rapidamente.
Network monitoring
Misura latency, payload size, errori per endpoint. Firebase Performance traccia automaticamente le richieste HTTP via OkHttp e NSURLSession. Imposta soglie di alert: p95 latency >1s, error rate >1%. Le slow request degradano UX più silenziosamente dei crash, e quindi più pericolose.
ANR e janky frames
ANR (Application Not Responding) e quando l'app non risponde per oltre 5 secondi. Google Vitals lo monitora e penalizza il ranking. Frame janky (>16ms) su scroll sono percepiti come "lentezza". Riduci sotto l'1% degli ANR e sotto il 5% i janky frame per essere considerati "buona qualità".
Startup time misurato bene
Cold start: tempo da tap a primo frame interattivo, non solo al primo render. Misurato da Activity.reportFullyDrawn() (Android) o NSWindow first-meaningful-paint (iOS). Differenzia warm vs cold start: warm start dovrebbe essere <500ms, cold start <2s.
Tool e dashboard
Android Vitals (Play Console), Firebase Performance, Sentry Performance, Xcode Organizer. Integra tutti in un dashboard unico (Datadog, Grafana). Imposta alert su deviation dalle baseline. Misura sempre release dopo release per individuare regressioni.
Time to first interaction
Misura il tempo dal lancio a quando l'utente puo interagire utilmente. Diverso da first paint (frame visivo). TTFI dovrebbe essere <3s su device medi. Tecniche: lazy initialization, defer di operazioni non critiche, prefetch dati prima del primo render. Strumenti: Android Macrobenchmark, Xcode Instruments Time Profiler.
Battery profile
Misura consumo per sessione tipica. iOS: Energy Log Activity (Instruments) categorizza consumo per network, CPU, GPU, location. Android: Battery Historian visualizza wakelock, jobs, frequenza CPU. Imposta target: <1% per ora di uso passivo. Apps che superano sono visibili nei Settings dell'utente, con conseguente perdita di fiducia.
Procedura passo-passo
- Identifica le metriche chiave per la tua app (startup, scroll, network).
- Integra Firebase Performance Monitoring o Sentry Performance.
- Definisci traces custom per le operazioni critiche.
- Configura alert su regressioni (es. cold start >2s).
- Profila con Xcode Instruments e Android Profiler nei rilasci.
- Misura ANR e crash-free session in console store.
- Rivedi i trend mensilmente e prioritizza i fix.
Real User Monitoring (RUM)
RUM aggregati su tutta la user base in produzione. Firebase Performance, Sentry Performance, Datadog Mobile RUM, New Relic Mobile sono i player principali. Strumenti dashboard con percentile (p50, p95, p99) per metric, segmentate per device, OS, country. Imposta budget di performance e alert su deviation. RUM rivela differenze reali tra device, regioni e network condition che non vedi in lab.
Performance budget
Stabilisci budget per ogni metrica: cold start <2s p95, screen transition <300ms p95, network p95 <1s. CI fail se la build supera il budget. Tools: Android Macrobenchmark con baseline profiles, iOS XCTest performance tests. Performance budget come parte del Definition of Done evita degradi cumulativi che diventano evidenti solo a release.
Battery e thermal monitoring
iOS espone ProcessInfo.thermalState per leggere stato thermal. Android ha PowerManager.getThermalStatus(). Adatta comportamento dell'app (riduci framerate, disabilita feature non essenziali) quando thermal critico. App che surriscaldano il device sono percepite negativamente e gli utenti le disinstallano.
Errori comuni e come risolverli
- Misure solo in debug: la build debug e più lenta; profila la release.
- Network sul main thread: blocca la UI, causa ANR e jank.
- Immagini non ottimizzate: usa WebP/HEIF e dimensionamento corretto.
- Animazioni complesse: usa hardware layer su Android e instruments su iOS.
- Mancanza di alert: senza alert, le regressioni passano inosservate.
Domande frequenti
D: Quanto e accettabile come cold start?
R: Sotto i 2 secondi su dispositivi medi, sotto 1,5 su flagship.
D: ANR e crash sono la stessa cosa?
R: No, ANR e quando l'app non risponde per oltre 5 secondi; il crash e una terminazione anomala.
D: Firebase Performance e gratuito?
R: Si, con quote elevate; integrazione semplice via SDK.
D: Come misurare frame rate in produzione?
R: Android: Choreographer.FrameCallback. iOS: CADisplayLink. Firebase Performance aggrega automaticamente.
Performance culture
Performance non e progetto una tantum ma cultura continua. Performance budget in CI, RUM in produzione, profiling periodico, post-mortem su regressioni. Train il team su tecniche di ottimizzazione. Mobile e ambiente vincolato (battery, network, CPU): pensare a performance dall'inizio paga rispetto a optimization tardiva.
Strumenti per profiling moderni (Android Macrobenchmark, Xcode Instruments, Firebase Performance) generano data ricchi ma richiedono interpretazione. Crea dashboards condivisi che mostrano metriche chiave per release. Imposta alert su deviation. Train il team su interpretation. Performance e responsabilità condivisa, non solo del lead tecnico.
Test su device reali rappresentativi del mercato target: device flagship (iPhone latest, Galaxy S latest), mid-range (iPhone 12-13, Pixel 5-6, Galaxy A series), entry-level (iPhone 11, dispositivi 100-200 EUR). Coverage adeguata rivela problemi specifici di hardware.
Hai bisogno di aiuto?
Se vuoi sviluppare la tua app con G Tech Group, scrivici tramite il modulo di contatto.