Dobici:
- Najprije uzimanjem profila i mjerenjem stvarnog uskog grla, optimizacijom temeljenom na podacima, a ne nagađanjima i tumačenjem rezultata profila pomoću umjetne inteligencije
- Sposobnost ciljanja najskuplje operacije u smislu vremena pokretanja, tečnosti, memorije i baterije i uklanjanja teškog posla iz glavne niti
- Sposobnost upravljanja baterijom i troškovima procesora AI mogućnosti kao što su model na uređaju i pozivanje u oblaku putem uzorkovanja i skupne obrade
Mobilni korisnici su nestrpljivi. Ako se aplikacija otvara sporo, zastaje dok se pomiče ili brzo prazni bateriju, korisnik je briše i ocjenjuje zvjezdicom u trgovini. Performanse i učinkovitost baterije pitanje su opstanka mobilne aplikacije; To izravno utječe i na zadovoljstvo korisnika i na rangiranje u trgovini. AI je snažna pomoć u otkrivanju uskih grla (uskih grla), tumačenju rezultata mjerenja i preporučivanju optimizacija. Ali zlatno pravilo ostaje: prvo mjerite, kasnije optimizirajte. U ovoj jedinici naučit ćemo rješavati probleme s performansama i baterijom na način temeljen na podacima pomoću umjetne inteligencije. 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 pogreška neiskusnog programera je prediktivna optimizacija: gubljenje vremena govoreći "ova mora biti spora". 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 tumačenje; Ali bez mjerenja, reći umjetnoj inteligenciji "moja je aplikacija spora, ubrzaj je" znači naslijepo predviđati.
Četiri glavne osi učinka su:
osovina
simptom
tipičan uzrok
Vrijeme početka
Prijava se otvara kasno
Teški rad na glavnoj niti
tečno (jank)
Svitak se zaglavi
Duga obrada, nepotrebno ponovno crtanje u niti korisničkog sučelja
pamćenje
oteklina, kolaps
Curenje, velika slika, nekontrolirana predmemorija
baterija/toplina
brza ejakulacija
Neprekidna lokacija, mreža, senzor, pozadinski posao
Savjet: kada pitate AI o problemu s performansama, dajte izlaz profila (koja funkcija traje koliko dugo, grafikon memorije). Čvrsti podaci poput "Ta funkcija traje 30 ms po okviru" omogućuju AI da se usredotoči na stvarno usko grlo; Subjektivna fraza poput "sporo" proizvodi generički i beskoristan odgovor.
Cijena baterije AI sposobnosti
AI značajke koje smo dodali u ovaj modul su moćne, ali nisu besplatne. Izdvajanje modela na uređaju opterećuje procesor i bateriju; Stalno pokrenuto prepoznavanje slike (npr. kamera obrađuje svaki kadar) zagrijat će 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) uključenim cijelo vrijeme. Rješenja: pokrenite model na uređaju samo kada je to potrebno, uzorkujte kameru nekoliko puta u sekundi umjesto svakog okvira, grupno šaljite zahtjeve u oblaku, obavljajte teške poslove dok se uređaj puni ili je u stanju mirovanja.
Oprez: Značajka umjetne inteligencije koja stalno radi (prevod uživo, kontinuirano prepoznavanje objekata) može vrlo brzo isprazniti bateriju, zagrijati uređaj i sustav može biti prigušen. Značajka zbog koje korisnik osjeća da je ovaj trošak izbrisan. Uvijek pitam AI "kako ovu značajku učiniti prilagođenom bateriji?" Također postavite pitanje.
Koraci optimizacije
- Mjera. Pronađite pravo usko grlo uz Profiler; ne pogađaj.
- Odaberite najveći problem. Nemojte juriti za 1% poboljšanja; Ciljajte na najskuplju transakciju.
- Pitajte AI s podacima. Zatražite prijedlog optimizacije s izlazom profila + relevantnim kodom.
- Nanesite i ponovno izmjerite. Je li poboljšanje stvarno? Je li broj pao?
- Kontrola regresije. Je li optimizacija nešto pokvarila? Ponovite vizualno i funkcionalno testiranje.
tri mini kućišta
Slučaj 1 — Pretraživanje na pogrešnom mjestu. Jedan tim je mislio da su popisi zapeli i tjednima je bezuspješno prerađivao kod za pomicanje. Kad su uzeli profiler i unijeli podatke u AI, pokazalo se da je pravo usko grlo slike koje se ponovno učitavaju preko mreže sa svakim redom. Kada je dodana vizualna predmemorija, tečnost je porasla s 42 FPS na 60 FPS. Pouka: mjerenjem se izbjegavaju tjedni uzaludnog truda.
Slučaj 2 — Čudovišna značajka baterije. Aplikacija za prevođenje dodala je prijevod teksta uživo s kamerom; Korisnici su se žalili da se "telefon zagrijao za 15 minuta i da je nestalo 30% baterije". Kada je AI konzultiran, ustanovljeno je da kamera obrađuje 30 sličica u sekundi; Kad je to smanjeno na 5 okvira i rezultat ažuriran u razmaku od nekoliko okvira, potrošnja baterije se smanjila na jednu trećinu, a kvaliteta nije bila primjetna. Lekcija: Uvijek postavite AI s okom baterije.
Slučaj 3 — Spori početak. Aplikacija se otvarala za 4,5 sekunde; 20% korisnika izlazilo je pri pokretanju. Profil je pokazao da je sav inicijalni posao (analitika, učitavanje podataka, priprema modela) obavljen uzastopno na glavnoj niti. Uz prijedlog umjetne inteligencije, oni su odgođeni i stavljeni u drugi plan; Vrijeme otvaranja smanjeno je na 1,3 sekunde, a stopa napuštanja prepolovljena. Pouka: u početku radite samo bitne poslove.
Slab upit / Jak upit
Slab upit: "Moja je aplikacija spora, ubrzaj je."
Snažan upit: "Pomicanje popisa se zaglavilo (jank) u mojoj Android aplikaciji. Podaci Profilera: bindImageView traje 28 ms za svaki okvir, slike se svaki put učitavaju s mreže, nema predmemorije. Povezani kod: [Kôd adaptera RecyclerView]. Preporučite 3 najučinkovitije optimizacije prema redoslijedu utjecaja. Navedite očekivani dobitak i moguće nuspojave za svaku. Dajte prioritet rješenjima koja ne smanjuju kvalitetu slike."
Predlošci koji se mogu kopirati
Predložak analize uskog grla: "Interpretirajte 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 učinak."
Predložak za optimizaciju baterije: "Ova značajka brzo prazni bateriju: [značajka, npr. stalna lokacija]. Učinite je prilagođenom bateriji:- Smanjite učestalost uzorkovanja- Ograničenje u pozadini- Skupna obrada- Pokreni samo kada je potrebno Sortiraj rješenja bez ometanja korisničkog iskustva. [kod]"
Predložak za ubrzanje pokretanja: "Ubrzajte pokretanje aplikacije. Stvari koje se trenutno rade pri pokretanju: [popis]. Što se može odgoditi, raditi u pozadini ili lijeno učitati? Odvojite one bitne. [kod]"
Predložak cijene značajke umjetne inteligencije: "Procijenite izvedbu i cijenu baterije značajke [model na uređaju / poziv u oblaku] koju sam dodao. Navedite mjerne podatke koje bih trebao mjeriti i strategije za smanjenje troškova. [kod]"
Uobičajene greške
- Optimizacija bez mjerenja. Pravo usko grlo često je na drugom mjestu od predviđenog.
- Jurnjava za malim dobicima. Ciljajte na najskuplju akciju, a ne na poboljšanje od 1%.
- Ignoriranje troškova baterije AI značajki. Konstantno uključen model/kamera/mreža troši bateriju.
- Zamaranje glavne niti. Težak posao pokretanja i pomicanja ne bi trebao biti na niti korisničkog sučelja.
- Nema ponovnog mjerenja nakon optimizacije. Provjerite je li poboljšanje stvarno i ništa ne kvari.
- Mjerenje performansi u emulatoru. Stvarna brzina uređaja, temperatura i baterija potpuno su drugačiji.
Ukratko
Performanse i baterija stvar su opstanka mobilne aplikacije. Zlatno pravilo: prvo mjeri, kasnije optimiziraj. Davanje podataka o profilu AI-u ubrzava tumačenje; Neizmjerna želja za „ubrzanjem“ dovodi do slijepih nagađanja. Ciljajte na najskuplju transakciju, nemojte juriti za malim profitom. Mogućnosti umjetne inteligencije dodane u ovaj modul su moćne, ali nose troškove baterije i procesora; Upravljajte ovim troškom smanjenjem učestalosti uzorkovanja, grupnim spajanjem i pokretanjem samo po potrebi. Ponovno izmjerite na stvarnom uređaju nakon svake optimizacije.
Zadatak aplikacije
Uvezite profil u aplikaciju (vaš vlastiti projekt ili primjer) ili izradite ogledni izlaz profila i neka ga AI interpretira pomoću "Predloška analize uskog grla". Primijenite optimizaciju najvećeg učinka i ponovno izmjerite: je li broj doista pao? Također, procijenite značajku umjetne inteligencije koju ste dodali u ovaj modul (model na uređaju ili poziv u oblaku) u smislu baterije pomoću "predloška cijene značajke umjetne inteligencije" i odredite barem jednu postavku prilagođenu bateriji.
popis za provjeru
- [ ] Dobio sam profil prije optimizacije, nisam pogodio
- [ ] Ciljao sam na najskuplju trgovinu, nisam se razbacivao malim profitom
- [ ] Dao sam podatke profila AI u konkretnim brojevima
- [ ] Procijenio sam cijenu baterije/procesora za značajke umjetne inteligencije
- [ ] Uklonio sam težak posao s glavne niti
- [ ] Nakon optimizacije ponovno sam mjerio na stvarnom uređaju i provjerio regresiju