Profiling (profillash) — bu ilovaning ishlashini asosiy metrikalar bo'yicha o'lchash jarayoni: CPU yuklamasi, xotira iste'moli, tarmoq trafigi va energiya iste'moli. Profillashning maqsadi — ilovani sekinlashtiradigan yoki haddan tashqari resurs iste'moliga sabab bo'ladigan tor joylarni topish. Android Developers ma'lumotlariga ko'ra, ishlanma bosqichida muntazam profillash produksiyadagi performance-bug'lar sonini 60% gacha kamaytiradi va hatto zaif qurilmalarda ham silliq UI ni saqlashga yordam beradi.
Asosiy
Profiling — bu ilovaning ishi haqida ma'lumotlarni yig'ish va tahlil qilish: qaysi funksiyalar bajariladi, qancha vaqt oladi, qancha xotira sarflaydi va tarmoq bilan qanday aloqa qiladi. Logging dan farqli o'laroq, profillash tizim darajasida ishlaydi va subyektiv baholash emas, balki aniq raqamli metrikalarni beradi.
Profillashning asosiy maqsadi — resurslardan optimal foydalanmaydigan kod qismlarini topish. Bular UI-threadda chaqiriladigan sekin metodlar, xotira oqishlari, samarasiz SQL so'rovlari, ortiqcha tarmoq chaqiruvlari yoki haddan tashqari energiya iste'moli bo'lishi mumkin. Profillashsiz dasturchilar haqiqiy ma'lumotlarga tayanmasdan, "sekin ko'rinadigan" narsalarni tuzatadilar.
Google I/O 2023 ma'lumotlariga ko'ra, ishlanma bosqichida muntazam profillashdan o'tadigan ilovalar 40% kamroq ANR (Application Not Responding) xatoliklari va 50% kamroq OutOfMemory sababli qulashlarni ko'rsatadi. Profillash vositalari barcha zamonaviy IDE larga o'rnatilgan — Android uchun Android Studio Profiler va iOS uchun Xcode Instruments.
Profillash statik (kodsiz tahlil — lint, Detekt) va dinamik (ilova ishlash vaqtida o'lchash) bo'ladi. Haqiqiy ishlash muammolarini topish uchun dinamik profillash qo'llaniladi, u ilovaning qurilmadagi yoki emulyatordagi haqiqiy xatti-harakatini ko'rsatadi.
Profillash har bir yirik relizdan oldin, og'ir UI komponentlarini (ro'yxatlar, animatsiyalar, maxsus View) joriy qilishda, foydalanuvchilarning sekinlashuv va batareya zaryadi haqidagi shikoyatlarida, shuningdek ilova arxitekturasi o'zgartirilgandan so'ng zarur. Tizimli yondashuv — har bir sprintda profillash o'tkazish, baseline metrikalarni qayd etish.
CPU-profillash qaysi metodlar va threadlar protsessorni yuklayotganini va har bir chaqiruvni bajarish qancha vaqt olishini kuzatadi. Asosiy vazifa — kutilganidan uzoqroq ishlaydigan va UI-threadni bloklab, kadr tushishiga (jank) va ANR ga sabab bo'ladigan funksiyalarni topish.
Android da CPU Profiler Top-Down tree — chaqiruvlar daraxtini ko'rsatadi, unda ma'lum bir thread kontekstida qaysi metod eng uzoq bajarilishini ko'rish mumkin. iOS da Instruments Time Profiler namuna olish printsipi asosida ishlaydi: teng vaqt oralig'ida (masalan, 1 ms) tizim har bir threadning chaqiruv stekini yozib oladi. Namunaviy statistika bo'yicha qaysi kod eng ko'p vaqt olishi aniqlanadi.
// Misol: jank keltirib chiqaradigan sekin metod
class UserAdapter : RecyclerView.Adapter<UserViewHolder>() {
override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
// ❌ Bu metod UI-threadda chaqiriladi va chizishni bloklaydi
// Profillash decompressImage 80% vaqt olishini ko'rsatadi
val user = getItem(position)
val bitmap = ImageUtils.decompressImage(user.avatar)
holder.avatarView.setImageBitmap(bitmap)
}
}
CPU profillashda Self Time yuqori bo'lgan metodlarga e'tibor berish kerak — bu metodning o'z ishini bajarish vaqti, bolaviy metodlarni hisobga olmaganda. Agar UI-threaddagi metodning Self Time 16 ms dan oshsa — bu 60 FPS ekranda kadrni o'tkazib yuborishni kafolatlaydi. Yechim — og'ir operatsiyalarni fon threadiga o'tkazish.
Memory-profillash ilova qancha xotira ishlatishini kuzatadi: qanday obyektlar yaratiladi, qancha yashaydi va qachon bo'shatiladi. Asosiy vazifa — oqishlar (mavjud bo'lmasligi kerak bo'lgan, lekin xotirada qoladigan obyektlar) va ortiqcha alokatsiyalarni (juda tez-tez yaratiladigan obyektlar) topish.
Android Memory Profiler real vaqtda RAM iste'moli grafigini, barcha alokatsiyalangan obyektlar ro'yxatini va har bir tur bo'yicha tafsilotlarni ko'rsatadi. Asosiy metrikalar: Java Heap (JVM kupyadagi obyektlar), Native Heap (C/C++ darajasidagi alokatsiyalar), Graphics Memory (teksturalar va GPU buferlari). iOS Instruments Allocations shunga o'xshash metrikalarni ko'rsatadi: Heap Allocations (kupyadagi obyektlar) va Anonymous VM (virtual xotira sahifalari).
| Metrika | Android Profiler | Instruments (iOS) |
|---|---|---|
| Kupya obyektlari | Java Heap + Native Heap | Heap Allocations |
| Grafika | Graphics Memory | VM Tracker |
| Oqishlar | Memory Profiler + LeakCanary | Leaks instrument |
| Kupya dumpi | HPROF (Capture) | Heapshot |
Memory-profillashda odatdagi foydalanuvchi ssenariylarini bajarganidan so'ng kupya dumpini olish muhim: ekranni ochish va yopish, ro'yxatni yuklash, tasvirlar bilan ishlash. Ikki dumpni (ssenariydan oldin va keyin) solishtirish qaysi obyektlar bo'shatilmaganligini ko'rsatadi. Agar Activity obyektlari soni oshgan bo'lsa, lekin ekran yopilgan bo'lsa — bu oqish.
Android Studio da dumpni Memory Profiler orqali oching: obyektlarni Retained Size bo'yicha saralang (qancha katta bo'lsa — obyekt shuncha ko'p xotirani ushlab turadi). Xotirada bo'lmasligi kerak bo'lgan Activity, Fragment va Bitmap namunalarini qidiring. Agar bunday obyekt mavjud bo'lsa — Reference Tree ga o'ting, uni nima ushlab turganini ko'rish uchun.
Network-profillash ilovaning barcha HTTP so'rovlarini kuzatadi: URL, javob hajmi, bajarilish vaqti, javob kodlari va sarlavhalar. Asosiy maqsad — juda ko'p vaqt oladigan, ortiqcha ma'lumotlarni uzatadigan yoki keraksiz chaqiriladigan so'rovlarni topish.
Android Network Profiler barcha tarmoq chaqiruvlarining vaqt shkalasini, ularning davomiyligi va uzatilgan ma'lumotlar hajmini ko'rsatadi. Har bir so'rovni to'liq sarlavhalar va javob tanasini ko'rish uchun ochish mumkin. iOS Instruments Network shu kabi vazifalar uchun URL Loading System monitoringidan foydalanadi va so'rovlarning waterfall-diagrammasini ko'rsatadi.
Network-profillash aniqlaydigan odatiy muammolar: keshlashning yo'qligi (bir xil JSON har safar ekran ochilganda yuklanadi), takrorlanuvchi so'rovlar (bir nechta komponentlar bir vaqtning o'zida bir xil ma'lumotlarni so'raydi), katta javoblar (server 5 MB JSON yuboradi, 100 KB kerak bo'lganda). Har bir muammo uchun standart yechim bor: OkHttp yoki URLSession orqali keshlashni sozlash, Combine yoki Flow orqali obunalarni birlashtirish, serverga paginatsiya qo'shish.
Birinchi baytga (TTFB — Time To First Byte) alohida e'tibor bering. Agar yaxshi ulanishda TTFB 500 ms dan oshsa — muammo server tomonda. Agar so'rovning o'zi tez bo'lsa, lekin JSON ni tahlil qilish soniyalar ketsa — muammo deserializatsiyada va uni alohida profillash kerak.
Energy-profillash ilovaning batareya zaryadiga qanday ta'sir qilishini o'lchaydi. Bu nisbatan yangi profillash turi, lekin mobil ilovalar uchun juda muhim — foydalanuvchilar telefonni haddan tashqari zaryadsizlantiradigan ilovalarni o'chirishadi. Android Studio dagi Energy Profiler va Instruments dagi Energy Log qaysi operatsiyalar (Wi-Fi, GPS, CPU, Bluetooth) har bir vaqtda energiya iste'mol qilishini ko'rsatadi.
Mobil ilovalarda energiyaning asosiy iste'molchilari: WakeLock (protsessorni faol holatda ushlab turish), GPS Location (doimiy koordinata yangilanishlari), tarmoq so'rovlari (ayniqsa 4G/5G mobil tarmog'ida), fondagi animatsiyalar. Energy Profiler ilova hodisalarini energiya iste'moli shkalasiga joylashtiradi — agar grafikda keskin o'sish bo'lsa, qaysi operatsiya buni keltirib chiqarganini aniq aniqlash mumkin.
Apple WWDC 2023 ma'lumotlariga ko'ra, ilovaning energiya iste'molini 20% ga kamaytirish foydalanuvchilarni ushlab qolishni 12% ga oshiradi, chunki foydalanuvchilar batareyani tez zaryadsizlantiradigan ilovalarni o'chirishga moyil. Tavsiya — GPS, fon sinxronizatsiyasi va striming bilan ssenariylarni sinashda har doim Energy Profiler ni yoqish.
Vositani tanlash platforma va profillash turiga bog'liq. Android uchun asosiy to'plam — Android Studio Profiler (CPU, Memory, Network, Energy), LeakCanary (xotira oqishlari) va Perfetto (yadro darajasida tizim profillashi). iOS uchun — Xcode Instruments Time Profiler, Allocations, Leaks, Energy Log, Network va Core Animation shablonlari to'plami bilan.
Flutter da kross-platforma ishlanmasi uchun DevTools Timeline (CPU), Memory, Network va Debugger modullari bilan ishlatiladi. React Native uchun — React DevTools va Facebook dan Flipper, u tarmoq, ma'lumotlar bazasi va UI iyerarxiyasini inspeksiya qilishni qo'llab-quvvatlaydi. Freymvorkdan qat'iy nazar, profillashning asosiy tamoyillari universaldir: optimallashtirishdan oldin va keyin o'lchang, baseline ni qayd eting, har bir kod o'zgarishida metrikalarni solishtiring.
Zamonaviy yondashuvlar CI da avtomatlashtirilgan profillashni o'z ichiga oladi. Android Firebase Test Lab UI-testlar bilan birga ishlash o'lchovlarini qo'llab-quvvatlaydi: siz nafaqat pass/fail testlarni, balki har bir iteratsiya uchun CPU, Memory va Network grafiklarini ham olasiz. iOS uchun shunga o'xshash funksionallikni GitHub Actions XCUITest va Instruments CLI bilan ta'minlaydi.
Bitta metrikani tezkor tekshirish uchun IDE ning o'rnatilgan profilleridan foydalaning. Murakkab oqish tahlili uchun — ixtisoslashtirilgan vositalar (LeakCanary, Instruments Leaks). Drayver darajasida tizim profillashi uchun — Perfetto (Android) yoki DTrace (macOS). Ikki-uch vositani birlashtirish profillash ssenariylarining 95% ini qamrab oladi.
Ko'p beriladigan savollar
Logging hodisalar ketma-ketligini matn ko'rinishida ko'rsatadi, profillash esa miqdoriy metrikalarni beradi — har bir kod qismi qancha vaqt, xotira, protsessor va tarmoq sarflaydi. Profillash «qancha ko'p» degan savolga, logging esa «nima bo'ldi» degan savolga javob beradi.
Har bir yirik relizdan oldin, yangi og'ir UI komponentlari joriy qilinganda va ishlash bo'yicha shikoyatlar paydo bo'lganda profillash tavsiya etiladi. Ideal holda profillash CI ga o'rnatilgan va har bir pull request da avtomatik ravishda ishga tushadi.
Ha, va bu emulyatordan ham afzalroq. Haqiqiy qurilma ma'lum bir apparat cheklovlarini hisobga olgan holda haqiqiy ishlashni ko'rsatadi. Android Studio Profiler va Xcode Instruments ulangan qurilmada hech qanday cheklovlarsiz profillashni qo'llab-quvvatlaydi.
Ha, har qanday profiller overhead qo'shadi. Namuna olishga asoslangan CPU-profillashda overhead 1–5% ni tashkil qiladi. Kupya dumpi bilan Memory-profillashda — dump vaqtida 10% gacha. Zamonaviy vositalar ta'sirni minimallashtirishga harakat qiladi, lekin natijalarni talqin qilishda buni hisobga olish kerak.
Baseline — bu ilovaning birinchi barqaror versiyasida olingan etalon ishlash metrikalari. Har bir kod o'zgarishida yangi metrikalarni baseline bilan solishtiring. Agar ishga tushirish vaqti baseline ga nisbatan 50 ms ga oshgan bo'lsa — o'zgarishlarni merge qilishdan oldin sababini aniqlash kerak.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.