- Published on
Firebase performance: ilovangiz tezligini nazorat qilish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Performance Monitoring nima va nega kerak?
Ilovangiz kodini yozib, App Store'ga yuklaganingizdan so'ng, u turli xil qurilmalarda va har xil internet tezliklarida qanday ishlayotganini bilishingiz kerak. "Ilova sekin ishlayapti" degan mavhum shikoyatlar o'rniga, Firebase Performance orqali siz aniq raqamlarni ko'rasiz:
- Ilovaning ishga tushish vaqti (App start time) qancha?
- Foydalanuvchi Bosh sahifani ochganda malumotlar ekranga chiqishi uchun necha soniya kutyapti?
- Serverga yuborilayotgan API so'rovlar qancha vaqt olyapti?
1. Avtomatik o'lchovlar (Out-of-the-box)
Firebase Performance'ning eng ajoyib xususiyati shundaki, siz FirebasePerformance kutubxonasini o'rnatishingiz bilan u ko'p narsalarni o'zi avtomatik o'lchashni boshlaydi:
- App Start Time: Ilova to'liq yuklanib, birinchi ekran chiqquncha ketgan vaqt.
- App in Foreground / Background: Ilova ekranda (faol) yoki orqa fonda qancha vaqt turgani.
- Network Requests: Ilovangizdan chiqib ketayotgan barcha HTTP so'rovlarning vaqti va hajmi.
Eslatma: App in foreground/background ishlashi uchun AppDelegate da mos funksiyalarni (applicationDidBecomeActive, applicationWillResignActive) yozib qo'yish kerak bo'lishi mumkin.
2. Custom Traces (O'zimiz o'lchaydigan jarayonlar)
Ba'zan bizga avtomatik o'lchovlar yetarli bo'lmaydi. Masalan, "Asosiy ekran"dagi ma'lumotlarni serverdan tortib olish va ularni ekranga chizish jarayonini aniq o'lchamoqchimiz. Buni Custom Trace deymiz.
import FirebasePerformance
func loadHomeData() async {
// 1. O'lchovni (Trace) boshlaymiz
let trace = Performance.startTrace(name: "home_screen_loading")
// 2. Qandaydir qiyin yoki uzoq davom etadigan jarayon
try? await Task.sleep(nanoseconds: 2_000_000_000) // 2 soniya kutamiz
// 3. O'lchovni to'xtatamiz
trace?.stop()
}
Endi Firebase Console'dagi Performance bo'limida home_screen_loading nomli grafik paydo bo'ladi va u o'rtacha qancha vaqt olayotganini ko'rsatadi.
3. Atributlar qo'shish
Jarayon o'lchanayotgan vaqtda qo'shimcha ma'lumotlarni (atributlarni) qo'shib ketish mumkin.
let trace = Performance.startTrace(name: "download_process")
// Qo'shimcha ma'lumotlar saqlaymiz:
trace?.setValue("started", forAttribute: "download_state")
// ... birozdan keyin ...
trace?.setValue("completed", forAttribute: "download_state")
trace?.stop()
4. Eng yaxshi amaliyot: PerformanceManager
Odatda biz o'lchovni bir joyda (onAppear) boshlab, boshqa joyda (onDisappear yoki ma'lumot kelgach) to'xtatamiz. Shuning uchun barcha Trace'larni bitta menejer (Singleton) ichida saqlash juda qulay:
class PerformanceManager {
static let shared = PerformanceManager()
private var traces: [String: Trace] = [:]
private init() {}
func startTrace(name: String) {
let trace = Performance.startTrace(name: name)
traces[name] = trace
}
func stopTrace(name: String) {
guard let trace = traces[name] else { return }
trace.stop()
traces.removeValue(forKey: name) // Xotirani tozalash
}
}
SwiftUI da ishlatilishi:
struct HomeView: View {
var body: some View {
Text("Bosh sahifa")
.onAppear {
PerformanceManager.shared.startTrace(name: "home_view_visible_time")
}
.onDisappear {
PerformanceManager.shared.stopTrace(name: "home_view_visible_time")
}
}
}
Xulosa
Har bitta funksiyaga Performance Trace yozish tavsiya etilmaydi! Bu kodingizni ifloslantiradi va Firebase'da keraksiz ma'lumotlar ko'payib ketadi. Oddiy statistikalar uchun Analytics ishlating. Performance'ni faqat ilovangizning eng muhim va tez ishlashi shart bo'lgan jarayonlarigagina (masalan: video yuklash, to'lov qilish, murakkab hisob-kitoblar) qo'ying.