Dobici:
- Prvo uzimanje profila i mjerenje stvarnog uskog grla, optimizacija zasnovana na podacima, a ne nagađanjima i tumačenje rezultata profila od strane umjetne inteligencije
- Mogućnost ciljanja najskuplje operacije u smislu vremena pokretanja, tečnosti, memorije i baterije i uklanjanja teškog posla s glavne niti
- Mogućnost upravljanja troškovima baterije i procesora AI mogućnosti kao što su model na uređaju i pozivanje u oblaku kroz uzorkovanje i grupnu obradu
Korisnici mobilnih telefona su nestrpljivi. Ako se aplikacija sporo otvara, visi dok se pomiče ili brzo isprazni bateriju, korisnik je briše i daje joj ocjenu u zvjezdicama u trgovini. Performanse i efikasnost baterije su pitanje opstanka mobilne aplikacije; To direktno utiče i na zadovoljstvo korisnika i na rangiranje trgovine. AI je moćna pomoć u otkrivanju uskih grla u performansama (uskih grla), tumačenju rezultata mjerenja i preporučivanju optimizacija. Ali zlatno pravilo ostaje: prvo mjerite, a kasnije optimizirajte. U ovoj jedinici naučit ćemo rješavati probleme s performansama i baterijom na način zasnovan na podacima pomoću AI. Posebno važno pitanje je upravljanje utjecajem na bateriju i performanse AI mogućnosti koje smo dodali u prethodnim jedinicama (model na uređaju, pozivanje u oblaku).
Optimizacija bez mjerenja
Najveća greška neiskusnog programera je prediktivna optimizacija: gubljenje vremena govoreći "ovo mora biti sporo". Pravo usko grlo je gotovo uvijek na neočekivanom mjestu. Dakle, prvo se uzima profil (profiliranje — mjerenje koji dio aplikacije troši koliko vremena/memorije/baterije). Android Studio Profiler i Xcode Instruments su za ovaj posao. Davanje mjernih podataka AI ubrzava interpretaciju; Ali bez mjerenja, reći AI "moja aplikacija je spora, ubrzaj" znači slijepo predviđanje.
Četiri glavne ose performansi su:
osovina
simptom
tipičan uzrok
Vrijeme početka
Aplikacija se otvara sa zakašnjenjem
Težak rad na glavnoj niti
tečnost (jank)
Scroll se zaglavi
Duga obrada, nepotrebno precrtavanje u UI niti
memorija
otok, kolaps
Curenje, velika slika, keš nekontrolisan
baterija/toplina
brza ejakulacija
Kontinuirana lokacija, mreža, senzor, pozadinski posao
Savjet: Kada pitate AI o problemu s performansama, dajte izlaz profila (koja funkcija traje koliko dugo, graf memorije). Čvrsti podaci poput „Ta funkcija traje 30 ms po kadru“ omogućavaju AI da se fokusira na pravo usko grlo; Subjektivna fraza poput "sporo" daje generički i beskorisni odgovor.
Trošak baterije AI sposobnosti
AI karakteristike koje smo dodali u ovaj modul su moćne, ali nisu besplatne. Izdvajanje modela na uređaju opterećuje procesor i bateriju; Prepoznavanje slike koje se neprekidno radi (npr. kamera koja obrađuje svaki kadar) će zagrijati telefon i isprazniti bateriju u roku od nekoliko minuta. Cloud AI pozivi, s druge strane, troše bateriju držeći mrežni radio (antena koja šalje i prima podatke) stalno uključena. Rješenja: pokrenite model na uređaju samo kada je to potrebno, uzorkovanje kamere nekoliko puta u sekundi umjesto svakog kadra, grupno slanje zahtjeva u oblaku, obavljajte teške poslove dok se uređaj puni ili neaktivan.
Oprez: Konstantno pokrenuta AI funkcija (prevođenje uživo, kontinuirano prepoznavanje objekata) može vrlo brzo isprazniti bateriju, zagrijati uređaj i može biti ugušena od strane sistema. Funkcija zbog koje se korisnik osjeća da je ovaj trošak izbrisan. Uvijek pitam AI "kako da ovu funkciju učinim prihvatljivom za baterije?" Također postavite pitanje.
Koraci optimizacije
- Mjera. Pronađite pravo usko grlo uz Profiler; ne pogađaj.
- Odaberite najveći problem. Nemojte juriti za poboljšanjem od 1%; Ciljajte na najskuplju transakciju.
- Pitajte AI sa podacima. Zatražite prijedlog optimizacije sa izlazom profila + relevantnim kodom.
- Nanesite i ponovo izmjerite. Da li je poboljšanje stvarno? Da li je broj pao?
- Kontrola regresije. Da li je optimizacija nešto slomila? Ponovite vizuelno i funkcionalno testiranje.
tri mini kofera
Slučaj 1 — Pretraživanje na pogrešnom mjestu. Jedan tim je mislio da su liste zaglavljene i prerađivao je kod za pomicanje sedmicama bezuspješno. Kada su uzeli profiler i predali podatke AI-u, ispostavilo se da su pravo usko grlo slike koje se ponovo učitavaju preko mreže sa svakim redom. Kada je dodat vizuelni keš, tečnost se povećala sa 42 FPS na 60 FPS. Pouka: mjerenjem se izbjegavaju sedmice uzaludnog truda.
Slučaj 2 — Značajka čudovišta baterije. Aplikacija za prevođenje dodala je prevođenje teksta uživo s kamerom; Korisnici su se žalili da se „telefon zagrejao za 15 minuta i da je nestalo 30% baterije“. Kada je konsultovan AI, otkriveno je da kamera obrađuje 30 sličica u sekundi; Kada je ovo smanjeno na 5 kadrova i rezultat je ažuriran u razmaku od nekoliko kadrova, potrošnja baterije se smanjila na jednu trećinu, a kvalitet nije bio primjetan. Pouka: Uvijek postavite AI s okom za bateriju.
Slučaj 3 — Sporo početak. Aplikacija se otvarala za 4,5 sekunde; 20% korisnika je izlazilo pri pokretanju. Profil je pokazao da je sav početni rad (analitika, učitavanje podataka, priprema modela) obavljen uzastopno na glavnoj niti. Sa AI prijedlogom, oni su odgođeni i stavljeni u zadnji plan; Vrijeme otvaranja je smanjeno na 1,3 sekunde, a stopa napuštanja je prepolovljena. Pouka: na početku radite samo suštinski posao.
Slaba prompt / Jaka prompt
Slab upit: "Moja aplikacija je spora, ubrzajte je."
Snažan upit: "Pomicanje liste se zaglavi (jank) u mojoj Android aplikaciji. Podaci za profiler: bindImageView traje 28 ms na svakom kadru, slike se svaki put učitavaju s mreže, nema keš memorije. Povezani kod: [RecyclerView adapterski kod]. Preporučite 3 najefikasnije optimizacije po redu utjecaja. Navedite očekivano povećanje kvalitete slike.
Predlošci koji se mogu kopirati
Predložak analize uskog grla: "Protumačite sljedeće podatke profila i pronađite 3 najskuplje operacije: [izlaz profilera]. Predložite mogući uzrok i konkretnu optimizaciju za svaku. Prvo dajte najveći utjecaj."
Predložak za optimizaciju baterije: "Ova funkcija brzo troši bateriju: [funkcija, npr. stalna lokacija]. Učinite je prilagođenom bateriji: - Smanjite frekvenciju uzorkovanja - Ograničenje u pozadini - Grupna obrada - Pokreni samo kada je potrebno Sortirajte rješenja bez ometanja korisničkog iskustva. [šifra]"
Predložak za ubrzavanje pokretanja: "Ubrzajte pokretanje aplikacije. Stvari koje se trenutno rade pri pokretanju: [lista]. Koje se mogu odgoditi, pozadine ili lijeno učitavati? Odvojite bitne. [šifra]"
Predložak troškova AI funkcije: "Procijenite performanse i cijenu baterije funkcije [model na uređaju/poziv u oblaku] koju sam dodao. Navedite metrike koje bih trebao mjeriti i strategije za smanjenje troškova. [šifra]"
Uobičajene greške
- Optimizacija bez mjerenja. Pravo usko grlo je često na drugoj lokaciji od predviđene.
- U potrazi za malim dobicima. Ciljajte na najskuplju akciju radije nego na poboljšanje od 1%.
- Zanemarivanje troškova baterije AI funkcija. Model/kamera/mreža koji stalno radi troši bateriju.
- Zamaram glavnu nit. Teško pokretanje i pomicanje ne bi trebalo biti na UI niti.
- Ne vrši se ponovno mjerenje nakon optimizacije. Uvjerite se da je poboljšanje stvarno i da ništa ne kvari.
- Mjerenje performansi u emulatoru. Stvarna brzina uređaja, temperatura i baterija se potpuno razlikuju.
Ukratko
Performanse i baterija su pitanje opstanka mobilnih aplikacija. Zlatno pravilo: prvo mjerite, a kasnije optimizirajte. Davanje podataka o profilu AI-u ubrzava interpretaciju; Neizmjerna želja za "ubrzanjem" dovodi do slijepih nagađanja. Ciljajte na najskuplju transakciju, nemojte juriti za malim zaradama. AI mogućnosti koje su dodane u ovom modulu su moćne, ali nose troškove baterije i procesora; Upravljajte ovim troškovima smanjenjem učestalosti uzorkovanja, seriranja i pokretanja samo kada je to potrebno. Izmjerite ponovo na stvarnom uređaju nakon svake optimizacije.
Zadatak aplikacije
Uvezite profil u aplikaciju (svoj projekt ili primjer) ili kreirajte uzorak izlaznog profila i neka ga AI interpretira pomoću "predloška analize uskog grla". Primijenite optimizaciju najvećeg učinka i ponovo izmjerite: da li je broj zapravo pao? Također, procijenite AI funkciju koju ste dodali u ovom modulu (model na uređaju ili poziv u oblaku) u smislu baterije pomoću "šablona troškova AI funkcije" i odredite barem jednu postavku koja je pogodna za bateriju.
kontrolna lista
- [ ] Dobio sam profil prije optimizacije, nisam pogodio
- [ ] Ciljao sam na najskuplju trgovinu, nisam se rasipao na male zarade
- [ ] Dao sam podatke AI profila u konkretnim brojevima
- [ ] Procijenio sam cijenu baterije/procesora za AI funkcije
- [ ] Uklonio sam teško podizanje sa glavne niti
- [ ] Nakon optimizacije, ponovo sam mjerio na stvarnom uređaju i provjerio regresiju