Kasu:
- Esmalt võttes profiili ja mõõtes tegelikku kitsaskohta, tehes optimeerimise andmetel, mitte oletustel ja lasta profiili väljundit tõlgendada tehisintellektil
- Võimalus suunata käivitusaja, sujuvuse, mälu ja aku osas kõige kallim toiming ning eemaldada põhilõngast raske töö
- Võimalus hallata tehisintellekti võimaluste (nt seadme mudeli ja pilvekõnede) aku ja protsessori kulusid proovivõtu ja paketttöötluse kaudu
Mobiilikasutajad on kannatamatud. Kui rakendus avaneb aeglaselt, hangub kerimise ajal või tühjeneb kiiresti aku, kustutab kasutaja selle ja annab sellele poes tärni. Jõudlus ja aku tõhusus on mobiilirakenduse ellujäämise küsimus; See mõjutab otseselt nii kasutajate rahulolu kui ka poe asetust. AI on võimas abivahend jõudluse kitsaskohtade (pudelikaelade) tuvastamisel, mõõtmistulemuste tõlgendamisel ja optimeerimiste soovitamisel. Kuid kuldreegel jääb kehtima: enne mõõda, hiljem optimeeri. Selles õppetükis õpime tehisintellektiga andmepõhiselt lahendama jõudluse ja aku probleeme. Eriti oluline probleem on eelmistes üksustes lisatud tehisintellekti võimaluste (seadmesisene mudel, pilvekõnede) mõju akule ja jõudlusele.
Optimeerimine ilma mõõtmiseta
Kogenematu arendaja suurim viga on ennustav optimeerimine: aja raiskamine sõnadega "see peab olema aeglane". Tõeline pudelikael on peaaegu alati ootamatus kohas. Seega võetakse esmalt profiil (profileerimine — mõõdetakse, milline rakenduse osa kui palju aega/mälu/akut kulutab). Selle töö jaoks on Android Studio Profiler ja Xcode Instruments. Mõõtmisandmete andmine tehisintellektile kiirendab tõlgendamist; Kuid ilma mõõtmiseta tähendab tehisintellekti ütlemine "minu rakendus on aeglane, kiirendage seda" pimesi ennustamist.
Neli peamist jõudluse telge on:
telg
sümptom
tüüpiline põhjus
Algusaeg
Taotlus avaneb hilja
Raske töö põhilõnga kallal
Sujuvus (jank)
Kerimine jääb kinni
Pikk töötlemine, kasutajaliidese lõimes tarbetu ümberjoonistamine
mälu
turse, kollaps
Leke, suur pilt, vahemälu kontrollimatu
aku/küte
kiire ejakulatsioon
Pidev asukoha, võrgu, anduri, taustatöö
Näpunäide. Kui küsite tehisintellektilt jõudlusprobleemi kohta, andke profiili väljund (milline funktsioon võtab kaua aega, mälugraafik). Kõvad andmed, nagu "See funktsioon võtab 30 ms kaadri kohta", võimaldavad AI-l keskenduda tegelikule kitsaskohale; Subjektiivne fraas nagu "aeglane" annab üldise ja kasutu vastuse.
AI võimete aku maksumus
Sellesse moodulisse lisatud AI-funktsioonid on võimsad, kuid need pole tasuta. Seadmes oleva mudeli eemaldamine koormab protsessorit ja akut; Pidevalt töötav pildituvastus (nt kaamera töötleb iga kaadrit) soojendab telefoni ja tühjendab aku mõne minuti jooksul. Pilve-AI-kõned seevastu söövad akut, kuna hoiavad võrguraadiot (antenni, mis saadab ja võtab vastu andmeid) kogu aeg sisse lülitatud. Lahendused: käivitage seadmesisene mudel ainult siis, kui vaja, proovige kaamerat iga kaadri asemel paar korda sekundis, saatke pilvepäringuid pakettidena, tehke raskusi seadme laadimise või jõudeoleku ajal.
Ettevaatust. Pidevalt töötav tehisintellekti funktsioon (reaalajas tõlge, pidev objektituvastus) võib aku väga kiiresti tühjendada, seadet kuumeneda ja süsteem võib seda pidurdada. Funktsioon, mis paneb kasutaja tundma, et see kulu on kustutatud. Küsin alati AI-lt "kuidas muuta see funktsioon akusõbralikuks?" Esitage ka küsimus.
Optimeerimise etapid
- Mõõtke. Leidke Profileriga tõeline kitsaskoht; ära arva.
- Valige suurim probleem. Ärge püüdke taga 1% paranemist; Eesmärk on kõige kallim tehing.
- Küsige tehisintellekti andmetega. Taotlege optimeerimissoovitust koos profiiliväljundi ja asjakohase koodiga.
- Kandke peale ja mõõtke uuesti. Kas paranemine on reaalne? Kas number on langenud?
- Regressioonikontroll. Kas optimeerimine rikkus midagi? Korda visuaalset ja funktsionaalset testimist.
kolm minikarpi
Juhtum 1 – otsimine valest kohast. Üks meeskond arvas, et loendid on kinni jäänud ja töötasid kerimiskoodi nädalaid ümber, kuid tulutult. Kui nad võtsid profileerija ja edastasid andmed tehisintellektile, selgus, et tegelik kitsaskoht oli iga reaga üle võrgu uuesti laaditavad pildid. Visuaalse vahemälu lisamisel suurenes sujuvus 42 kaadrit sekundis 60 kaadrit sekundis. Õppetund: mõõtmine väldib nädalaid mõttetuid pingutusi.
Juhtum 2 – akukoletise funktsioon. Tõlkerakendus lisas kaameraga teksti reaalajas tõlke; Kasutajad kurtsid, et "telefon kuumenes 15 minutiga ja 30% akust oli otsas." Tehisintellektiga konsulteerides leiti, et kaamera töötleb 30 kaadrit sekundis; Kui see vähendati 5 kaadrini ja tulemust mõne kaadri vahega värskendati, vähenes aku kulu kolmandikuni ja kvaliteet ei olnud märgatav. Õppetund: Seadke tehisintellekt alati akusilmaga.
Juhtum 3 – aeglane algus. Rakendus avanes 4,5 sekundiga; 20% kasutajatest lahkus käivitamisel. Profiil näitas, et kogu esialgne töö (analüütika, andmete laadimine, mudeli ettevalmistamine) tehti põhilõimel järjestikku. Tehisintellekti ettepanekuga on need edasi lükatud ja jäänud tahaplaanile; Avamisaega vähendati 1,3 sekundile ja loobumismäära poole võrra. Õppetund: tehke alguses ainult hädavajalikke töid.
Nõrk viip / Tugev viip
Nõrk viip: "Minu rakendus on aeglane, kiirendage seda."
Võimas viip: "Loendi kerimine takerdub (jank) minu Androidi rakenduses. Profileerija andmed: bindImageView võtab iga kaadri kohta 28 ms, pildid laaditakse iga kord võrgust, vahemälu puudub. Seotud kood: [RecyclerView adapteri kood]. Soovitage mõju järjekorras 3 kõige tõhusamat optimeerimist. Märkige iga lahenduse puhul eeldatava kasu ja ärge vähendage võimalikke kõrvalmõjusid.
Kopeeritavad mallid
Kitsaskoha analüüsi mall: "Tõlgendage järgmisi profiiliandmeid ja leidke 3 kõige kallimat toimingut: [profiili väljund]. Soovitage igaühe jaoks võimalik põhjus ja konkreetne optimeerimine. Esmalt andke suurim mõju."
Aku optimeerimise mall: "See funktsioon tühjendab akut kiiresti: [funktsioon, nt püsiasukoht]. Muutke see akusõbralikuks: - vähendage diskreetimissagedust - piirake taustal - paketttöötlust - käivitage ainult vajaduse korral Sorteerige lahendusi kasutajakogemust häirimata. [kood]"
Käivitamise kiirendamise mall: "Kiirustage rakenduse käivitamist. Asjad, mida praegu käivitamisel tehakse: [loend]. Mida saab edasi lükata, taustal või laisklaadimisel? Eraldage olulised. [kood]"
Tehisintellekti funktsioonide kulumall: "Hinda minu lisatud [seadmes oleva mudeli / pilvkõne] funktsiooni jõudlust ja aku maksumust. Loetlege mõõdikud, mida peaksin mõõtma, ja strateegiad kulude vähendamiseks. [kood]."
Levinud vead
- Optimeerimine ilma mõõtmiseta. Tegelik kitsaskoht on sageli prognoositust erinevas kohas.
- Väikeste kasumite tagaajamine. Eesmärk on kõige kallim tegevus, mitte 1% paranemine.
- AI funktsioonide aku maksumuse ignoreerimine. Pidevalt töötav mudel/kaamera/võrk sööb aku ära.
- Väsitab põhilõnga ära. Käivitamise ja kerimise raske tõstmine ei tohiks olla kasutajaliidese lõimel.
- Pärast optimeerimist ei mõõta uuesti. Veenduge, et täiustus on tõeline ega riku midagi.
- Emulaatori jõudluse mõõtmine. Seadme tegelik kiirus, temperatuur ja aku on täiesti erinevad.
Kokkuvõttes
Jõudlus ja aku on mobiilirakenduse ellujäämise küsimus. Kuldne reegel: kõigepealt mõõda, hiljem optimeeri. Profiiliandmete andmine AI-le kiirendab tõlgendamist; Mõõtmatu soov "kiirendada" viib pimedate oletusteni. Sihtige kõige kallimat tehingut, ärge jahtige väikest kasumit. Sellesse moodulisse lisatud AI-võimalused on võimsad, kuid nendega kaasnevad aku- ja protsessorikulud; Hallake seda kulu, vähendades diskreetimissagedust, partiide jagamist ja käivitades ainult vajaduse korral. Mõõtke pärast iga optimeerimist reaalses seadmes uuesti.
Rakenduse ülesanne
Importige profiil rakendusse (oma projekt või näide) või looge näidisprofiili väljund ja laske tehisintellektil seda "pudelikaela analüüsi malli" abil tõlgendada. Rakendage suurimat mõju optimeerimist ja mõõtke uuesti: kas see arv tegelikult langes? Samuti hinnake sellesse moodulisse lisatud tehisintellekti funktsiooni (seadmesisene mudel või pilvekõne) aku osas "AI funktsiooni kulumalli" abil ja määrake vähemalt üks akusõbralik seade.
kontrollnimekiri
- [ ] Sain profiili enne optimeerimist, ma ei arvanud
- [ ] Võtsin eesmärgiks kõige kallima tehingu, ei puistanud väikesele kasumile
- [ ] Andsin tehisintellekti profiili andmed konkreetsete arvudena
- [ ] Hindasin tehisintellekti funktsioonide aku/protsessori maksumust
- [ ] Võtsin põhilõnga küljest lahti raske tõstmise
- [ ] Pärast optimeerimist mõõtsin uuesti reaalses seadmes ja kontrollisin regressiooni