Keuntungan:
- Dengan terlebih dahulu mengambil profil dan mengukur kesesakan sebenar, membuat pengoptimuman berdasarkan data dan bukannya tekaan dan mempunyai output profil ditafsirkan oleh kecerdasan buatan
- Keupayaan untuk menyasarkan operasi yang paling mahal dari segi masa permulaan, kelancaran, memori dan bateri dan mengeluarkan kerja berat dari benang utama
- Keupayaan untuk mengurus bateri dan kos pemproses keupayaan AI seperti model pada peranti dan panggilan awan melalui pensampelan dan pemprosesan kelompok
Pengguna mudah alih tidak sabar. Jika apl dibuka perlahan-lahan, tergantung semasa menatal atau menghabiskan bateri dengan cepat, pengguna memadamkannya dan memberikannya penarafan bintang di kedai. Prestasi dan kecekapan bateri adalah soal kelangsungan apl mudah alih; Ia secara langsung mempengaruhi kepuasan pengguna dan kedudukan kedai. AI ialah bantuan yang berkuasa dalam mengesan kesesakan prestasi (bottleneck), mentafsir keputusan pengukuran dan mengesyorkan pengoptimuman. Tetapi peraturan emas kekal: ukur dahulu, optimumkan kemudian. Dalam unit ini, kita akan belajar untuk menyelesaikan masalah prestasi dan bateri dalam cara berasaskan data dengan AI. Isu yang sangat penting ialah mengurus kesan pada bateri dan prestasi keupayaan AI yang kami tambahkan dalam unit sebelumnya (model pada peranti, panggilan awan).
Mengoptimumkan tanpa mengukur
Kesilapan terbesar pembangun yang tidak berpengalaman ialah pengoptimuman ramalan: membuang masa dengan mengatakan "yang ini mesti lambat". Kesesakan sebenar hampir selalu berada di tempat yang tidak dijangka. Oleh itu, profil diambil terlebih dahulu (profil — mengukur bahagian mana aplikasi menggunakan berapa banyak masa/memori/bateri). Android Studio Profiler dan Xcode Instruments adalah untuk tugas ini. Memberi data pengukuran kepada AI mempercepatkan tafsiran; Tetapi tanpa pengukuran, memberitahu AI "aplikasi saya lambat, mempercepatkannya" bermakna membuat ramalan secara membuta tuli.
Empat paksi utama prestasi ialah:
paksi
gejala
sebab biasa
Masa mula
Permohonan dibuka lewat
Kerja berat pada benang utama
Kefasihan (jank)
Tatal tersangkut
Pemprosesan lama, lukis semula yang tidak perlu dalam urutan UI
ingatan
bengkak, runtuh
Kebocoran, imej besar, cache tidak terkawal
bateri / haba
cepat pancut
Lokasi berterusan, rangkaian, penderia, kerja latar belakang
Petua: Apabila bertanya kepada AI tentang isu prestasi, berikan output profil (fungsi yang mengambil masa, graf memori). Data keras seperti "Fungsi itu mengambil masa 30ms setiap bingkai" membolehkan AI menumpukan pada kesesakan sebenar; Frasa subjektif seperti "lambat" menghasilkan jawapan generik dan tidak berguna.
Kos bateri kebolehan AI
Ciri AI yang kami tambahkan dalam modul ini berkuasa, tetapi ia tidak percuma. Mengeluarkan model pada peranti membebankan pemproses dan bateri; Pengecaman imej yang sentiasa berjalan (mis. pemprosesan kamera setiap bingkai) akan memanaskan telefon dan menghabiskan bateri dalam beberapa minit. Panggilan Cloud AI, sebaliknya, memakan bateri dengan mengekalkan radio rangkaian (antena yang menghantar dan menerima data) pada setiap masa. Penyelesaian: jalankan model pada peranti hanya apabila diperlukan, sampel kamera beberapa kali sesaat dan bukannya setiap bingkai, hantar permintaan awan secara berkelompok, lakukan pengangkatan berat semasa peranti sedang mengecas atau melahu.
Awas: Ciri AI yang sentiasa berjalan (terjemahan langsung, pengecaman objek berterusan) boleh menghabiskan bateri dengan sangat cepat, memanaskan peranti dan mungkin terbantut oleh sistem. Ciri yang membuatkan pengguna merasakan kos ini dipadamkan. Saya selalu bertanya kepada AI "bagaimana cara saya menjadikan ciri ini mesra bateri?" Tanya juga soalan itu.
Langkah-langkah pengoptimuman
- ukur. Cari kesesakan sebenar dengan Profiler; jangan meneka.
- Pilih masalah terbesar. Jangan mengejar peningkatan 1%; Matlamat untuk transaksi yang paling mahal.
- Tanya AI dengan data. Minta cadangan pengoptimuman dengan output profil + kod yang berkaitan.
- Sapukan dan ukur semula. Adakah peningkatan itu nyata? Adakah nombor itu telah menurun?
- Kawalan regresi. Adakah pengoptimuman memecahkan apa-apa? Ulangi ujian visual dan fungsi.
tiga kes mini
Kes 1 — Mencari di tempat yang salah. Satu pasukan menganggap senarai tersekat dan mengolah semula kod tatal selama berminggu-minggu tetapi tidak berjaya. Apabila mereka mengambil pemprofil dan menyalurkan data kepada AI, ternyata kesesakan sebenar adalah imej yang dimuatkan semula melalui rangkaian dengan setiap baris. Apabila cache visual ditambahkan, kefasihan meningkat daripada 42 FPS kepada 60 FPS. Pengajaran: pengukuran mengelakkan minggu usaha sia-sia.
Kes 2 — Ciri raksasa bateri. Apl terjemahan menambah terjemahan teks langsung dengan kamera; Pengguna mengadu bahawa "telefon menjadi panas dalam masa 15 minit dan 30% daripada bateri telah hilang." Apabila AI dirujuk, kamera didapati memproses 30 bingkai sesaat; Apabila ini dikurangkan kepada 5 bingkai dan hasilnya dikemas kini beberapa bingkai, penggunaan bateri berkurangan kepada satu pertiga, dan kualiti tidak ketara. Pelajaran: Sentiasa tetapkan AI dengan mata bateri.
Kes 3 — Permulaan perlahan. Apl dibuka dalam masa 4.5 saat; 20% pengguna telah keluar pada permulaan. Profil menunjukkan bahawa semua kerja awal (analisis, pemuatan data, penyediaan model) dilakukan secara berurutan pada utas utama. Dengan cadangan AI, ini telah ditangguhkan dan diletakkan pada penunu belakang; Masa pembukaan dikurangkan kepada 1.3 saat, dan kadar pengabaian dikurangkan separuh. Pengajaran: buat kerja penting sahaja pada mulanya.
Gesaan lemah / Gesaan kuat
Gesaan lemah: "Apl saya perlahan, percepatkannya."
Gesaan kuat: "Tatal senarai tersekat (jank) dalam aplikasi Android saya. Data pemprofil: bindImageView mengambil masa 28ms pada setiap bingkai, imej dimuatkan dari rangkaian setiap kali, tiada cache. Kod berkaitan: [Kod penyesuai RecyclerView]. Syorkan 3 pengoptimuman paling berkesan mengikut urutan kesan. Nyatakan keuntungan yang dijangkakan dan kemungkinan penyelesaian imej tidak diutamakan untuk setiap penyelesaian.
Templat yang boleh disalin
Templat analisis bottleneck: "Terjemahkan data profil berikut dan cari 3 operasi paling mahal: [output profil]. Cadangkan sebab yang mungkin dan pengoptimuman konkrit untuk setiap satu. Berikan impak tertinggi dahulu."
Templat pengoptimuman bateri:"Ciri ini menghabiskan bateri dengan cepat: [ciri, cth. lokasi kekal]. Jadikan ia mesra bateri:- Kurangkan kekerapan pensampelan- Sekatan di latar belakang- Pemprosesan kelompok- Jalankan hanya apabila perlu Isih penyelesaian tanpa mengganggu pengalaman pengguna. [kod]"
Templat mempercepatkan permulaan: "Percepatkan permulaan aplikasi. Perkara yang sedang dilakukan semasa permulaan: [senarai]. Mana yang boleh ditangguhkan, di latar belakang atau dimuatkan secara malas? Asingkan yang penting. [kod]"
Templat kos ciri AI: "Nilai prestasi dan kos bateri bagi ciri [model pada peranti / panggilan awan] yang saya tambahkan. Senaraikan metrik yang harus saya ukur dan strategi untuk mengurangkan kos. [kod]"
Kesilapan biasa
- Mengoptimumkan tanpa mengukur. Kesesakan sebenar selalunya berada di lokasi yang berbeza daripada yang diramalkan.
- Mengejar keuntungan kecil. Matlamat untuk tindakan yang paling mahal daripada peningkatan 1%.
- Mengabaikan kos bateri ciri AI. Model/kamera/rangkaian yang sentiasa berjalan memakan bateri.
- Memenatkan benang utama. Pengangkatan berat untuk memulakan dan menatal tidak sepatutnya berada pada urutan UI.
- Tidak mengukur semula selepas pengoptimuman. Sahkan bahawa peningkatan adalah nyata dan tidak merosakkan apa-apa.
- Mengukur prestasi dalam emulator. Kelajuan peranti, suhu dan bateri sebenar adalah berbeza sama sekali.
Secara ringkasnya
Prestasi dan bateri adalah soal kelangsungan apl mudah alih. Peraturan emas: ukur dahulu, optimumkan kemudian. Memberi data profil kepada AI mempercepatkan tafsiran; Keinginan yang tidak terukur untuk "mempercepatkan" membawa kepada tekaan buta. Bertujuan untuk transaksi yang paling mahal, jangan mengejar keuntungan kecil. Keupayaan AI yang ditambahkan dalam modul ini berkuasa tetapi membawa kos bateri dan pemproses; Uruskan kos ini dengan mengurangkan kekerapan pensampelan, kumpulan dan berjalan hanya apabila diperlukan. Ukur sekali lagi pada peranti sebenar selepas setiap pengoptimuman.
Tugasan permohonan
Import profil dalam aplikasi (projek atau contoh anda sendiri) atau buat contoh output profil dan minta ia ditafsirkan oleh AI dengan "Templat analisis Bottleneck". Gunakan pengoptimuman impak tertinggi dan ukur sekali lagi: adakah bilangan itu sebenarnya menurun? Selain itu, nilaikan ciri AI yang anda tambahkan dalam modul ini (model pada peranti atau panggilan awan) dari segi bateri dengan "templat kos ciri AI" dan tentukan sekurang-kurangnya satu tetapan mesra bateri.
senarai semak
- [ ] Saya mendapat profil sebelum pengoptimuman, saya tidak meneka
- [ ] Saya bertujuan untuk perdagangan yang paling mahal, saya tidak menaburkan keuntungan kecil
- [ ] Saya memberikan data profil AI dalam nombor konkrit
- [ ] Saya menilai kos bateri/pemproses ciri AI
- [ ] Saya mengeluarkan pengangkat berat dari benang utama
- [ ] Selepas pengoptimuman, saya mengukur sekali lagi pada peranti sebenar dan menyemak regresi