Guadagni:
- Prendendo prima un profilo e misurando il collo di bottiglia reale, effettuando l'ottimizzazione basata sui dati anziché su congetture e facendo interpretare l'output del profilo all'intelligenza artificiale
- Capacità di indirizzare l'operazione più costosa in termini di tempo di avvio, fluidità, memoria e batteria e rimuovere il lavoro pesante dal thread principale
- Capacità di gestire i costi della batteria e del processore delle funzionalità di intelligenza artificiale come il modello su dispositivo e le chiamate cloud tramite campionamento ed elaborazione batch
Gli utenti mobili sono impazienti. Se l'app si apre lentamente, si blocca durante lo scorrimento o scarica rapidamente la batteria, l'utente la elimina e le assegna una valutazione in stelle nello store. Le prestazioni e l'efficienza della batteria sono una questione di sopravvivenza di un'app mobile; Influisce direttamente sia sulla soddisfazione degli utenti che sul posizionamento del negozio. L'intelligenza artificiale è un potente aiuto per rilevare i colli di bottiglia delle prestazioni (colli di bottiglia), interpretare i risultati delle misurazioni e consigliare ottimizzazioni. Ma la regola d’oro resta: prima misurare, poi ottimizzare. In questa unità impareremo a risolvere i problemi di prestazioni e batteria in modo basato sui dati con l'intelligenza artificiale. Una questione particolarmente importante è la gestione dell'impatto sulla batteria e sulle prestazioni delle funzionalità AI che abbiamo aggiunto nelle unità precedenti (modello su dispositivo, chiamate cloud).
Ottimizzare senza misurare
L'errore più grande di uno sviluppatore inesperto è l'ottimizzazione predittiva: perdere tempo a dire "questo deve essere lento". Il vero collo di bottiglia si trova quasi sempre in un luogo inaspettato. Quindi prima viene preso il profilo (profilazione: misurazione di quale parte dell'applicazione consuma quanto tempo/memoria/batteria). Android Studio Profiler e Xcode Instruments sono adatti a questo lavoro. Fornire dati di misurazione all’intelligenza artificiale accelera l’interpretazione; Ma senza misurazione, dire all’IA “la mia applicazione è lenta, accelerala” significa fare previsioni ciecamente.
I quattro assi principali della prestazione sono:
asse
sintomo
causa tipica
Ora di inizio
L'applicazione si apre tardi
Lavoro pesante sul thread principale
Fluidità (jank)
Lo scorrimento si blocca
Elaborazione lunga, ridisegno non necessario nel thread dell'interfaccia utente
memoria
gonfiore, collasso
Perdita, immagine di grandi dimensioni, cache non controllata
batteria/calore
eiaculazione rapida
Posizione continua, rete, sensore, lavoro in background
Suggerimento: quando chiedi all'IA un problema di prestazioni, fornisci l'output del profilo (quale funzione impiega quanto tempo, grafico della memoria). Dati concreti come “Quella funzione richiede 30 ms per fotogramma” consentono all’IA di concentrarsi sul vero collo di bottiglia; Una frase soggettiva come "lento" produce una risposta generica e inutile.
Costo della batteria delle abilità dell'IA
Le funzionalità AI che abbiamo aggiunto in questo modulo sono potenti, ma non sono gratuite. L'estrazione di un modello sul dispositivo mette a dura prova il processore e la batteria; Un riconoscimento dell'immagine costantemente attivo (ad esempio la fotocamera che elabora ogni fotogramma) surriscalda il telefono e scarica la batteria in pochi minuti. Le chiamate AI cloud, invece, consumano la batteria mantenendo la radio di rete (l'antenna che invia e riceve i dati) sempre accesa. Soluzioni: esegui il modello sul dispositivo solo quando necessario, campiona la fotocamera alcune volte al secondo anziché ogni fotogramma, invia in batch richieste cloud, esegui il lavoro pesante mentre il dispositivo è in carica o inattivo.
Attenzione: una funzionalità AI costantemente attiva (traduzione dal vivo, riconoscimento continuo degli oggetti) può scaricare la batteria molto rapidamente, surriscaldare il dispositivo e potrebbe essere limitata dal sistema. Una funzionalità che fa sentire all'utente che questo costo è stata eliminata. Chiedo sempre all'IA "come posso rendere questa funzionalità compatibile con la batteria?" Fai anche la domanda.
Passi di ottimizzazione
- Misurare. Trova il vero collo di bottiglia con Profiler; non indovinare.
- Scegli il problema più grande. Non inseguire un miglioramento dell'1%; Punta alla transazione più costosa.
- Chiedi all'intelligenza artificiale con i dati. Richiedi suggerimento di ottimizzazione con output del profilo + relativo codice.
- Applicare e misurare nuovamente. Il miglioramento è reale? Il numero è sceso?
- Controllo della regressione. L'ottimizzazione ha rotto qualcosa? Ripetere i test visivi e funzionali.
tre mini custodie
Caso 1: ricerca nel posto sbagliato. Un team ha pensato che gli elenchi fossero bloccati e ha rielaborato il codice di scorrimento per settimane senza alcun risultato. Quando hanno preso il profiler e hanno fornito i dati all’intelligenza artificiale, si è scoperto che il vero collo di bottiglia erano le immagini che venivano ricaricate sulla rete con ogni riga. Quando è stata aggiunta la cache visiva, la fluidità è aumentata da 42 FPS a 60 FPS. Lezione: la misurazione evita settimane di inutili sforzi.
Caso 2 – Funzionalità del mostro batteria. Un'app di traduzione ha aggiunto la traduzione del testo in tempo reale con la fotocamera; Gli utenti si sono lamentati del fatto che "il telefono si è riscaldato in 15 minuti e il 30% della batteria era esaurito". Quando è stata consultata l’intelligenza artificiale, si è scoperto che la fotocamera elaborava 30 fotogrammi al secondo; Quando questo è stato ridotto a 5 fotogrammi e il risultato è stato aggiornato a distanza di alcuni fotogrammi, il consumo della batteria è sceso a un terzo e la qualità non era evidente. Lezione: impostare sempre l'IA con il Battery Eye.
Caso 3 – Insorgenza lenta. Un'app si apriva in 4,5 secondi; Il 20% degli utenti usciva all'avvio. Il profilo ha mostrato che tutto il lavoro iniziale (analisi, caricamento dei dati, preparazione del modello) è stato svolto in sequenza sul thread principale. Con la proposta dell’IA, questi sono stati rinviati e messi nel dimenticatoio; Il tempo di apertura è stato ridotto a 1,3 secondi e il tasso di abbandono è stato dimezzato. Lezione: all'inizio fai solo il lavoro essenziale.
Prompt debole / Prompt forte
Prompt debole: "La mia app è lenta, accelerala."
Prompt potente: "Lo scorrimento dell'elenco si blocca (jank) nella mia applicazione Android. Dati del profiler: bindImageView impiega 28 ms su ciascun fotogramma, le immagini vengono caricate ogni volta dalla rete, non c'è cache. Codice correlato: [Codice adattatore RecyclerView]. Consiglia le 3 ottimizzazioni più efficaci in ordine di impatto. Indica il guadagno atteso e i possibili effetti collaterali per ciascuna. Dai priorità alle soluzioni che non riducono la qualità dell'immagine. "
Modelli copiabili
Modello di analisi dei colli di bottiglia: "Interpreta i seguenti dati del profilo e trova le 3 operazioni più costose: [output del profiler]. Suggerisci una possibile causa e un'ottimizzazione concreta per ciascuna. Fornisci prima l'impatto maggiore."
Modello di ottimizzazione della batteria: "Questa funzionalità scarica rapidamente la batteria: [funzione, ad es. posizione permanente]. Rendila compatibile con la batteria: - Riduci la frequenza di campionamento - Restrizione in background - Elaborazione batch - Esegui solo quando necessario Ordina le soluzioni senza interrompere l'esperienza dell'utente. [codice]"
Modello di accelerazione dell'avvio: "Accelera l'avvio dell'applicazione. Cose attualmente in corso all'avvio: [elenco]. Quali possono essere posticipate, in background o caricate lentamente? Separa quelle essenziali. [codice]"
Modello di costo delle funzionalità AI: "Valuta le prestazioni e il costo della batteria della funzionalità [modello sul dispositivo/chiamata cloud] che ho aggiunto. Elenca le metriche che dovrei misurare e le strategie per ridurre i costi. [codice]"
Errori comuni
- Ottimizzare senza misurare. Il vero collo di bottiglia si trova spesso in una posizione diversa da quella prevista.
- Alla ricerca di piccoli guadagni. Puntare all’azione più costosa piuttosto che al miglioramento dell’1%.
- Ignorando il costo della batteria delle funzionalità AI. Il modello/fotocamera/rete costantemente in funzione consuma la batteria.
- Stancando il filo conduttore. Il lavoro pesante relativo all'avvio e allo scorrimento non dovrebbe riguardare il thread dell'interfaccia utente.
- Non ripetere la misurazione dopo l'ottimizzazione. Verificare che il miglioramento sia reale e non rompa nulla.
- Misurazione delle prestazioni nell'emulatore. La velocità effettiva del dispositivo, la temperatura e la batteria sono completamente diverse.
In sintesi
Le prestazioni e la batteria sono una questione di sopravvivenza delle app mobili. La regola d'oro: prima misurare, poi ottimizzare. Fornire i dati del profilo all’IA velocizza l’interpretazione; L'incommensurabile desiderio di "accelerare" porta a ipotesi cieche. Punta alla transazione più costosa, non inseguire piccoli profitti. Le funzionalità AI aggiunte in questo modulo sono potenti ma comportano costi di batteria e processore; Gestisci questo costo riducendo la frequenza di campionamento, il batching e l'esecuzione solo quando necessario. Misura nuovamente sul dispositivo reale dopo ogni ottimizzazione.
Compito dell'applicazione
Importa un profilo in un'applicazione (il tuo progetto o un esempio) o crea un output di profilo campione e fallo interpretare dall'intelligenza artificiale con il "modello di analisi del collo di bottiglia". Applica l'ottimizzazione dell'impatto più elevato e misura nuovamente: il numero è effettivamente diminuito? Inoltre, valuta una funzionalità AI che hai aggiunto in questo modulo (modello sul dispositivo o chiamata cloud) in termini di batteria con il "modello di costo delle funzionalità AI" e determina almeno un'impostazione che favorisce la batteria.
lista di controllo
- [ ] Ho ottenuto il profilo prima dell'ottimizzazione, non avevo indovinato
- [ ] Ho puntato all'operazione più costosa, non ho disperso in piccoli profitti
- [] Ho fornito i dati del profilo AI in numeri concreti
- [ ] Ho valutato il costo della batteria/processore delle funzionalità AI
- [] Ho rimosso il lavoro pesante dal thread principale
- [ ] Dopo l'ottimizzazione ho misurato nuovamente sul dispositivo reale e ho controllato la regressione