זמן טעינה קרה (Cold launch) הוא המדד הראשון שמשתמשים מבחינים בו. אם הטעינה הקרה שלך עולה על 2 שניות, 5% מהמשתמשים עלולים לסגור את האפליקציה. אפל ממליצה על טעינה קרה מתחת ל-20 שניות, אבל סף הסבילות האמיתי נמוך יותר. ללא ניטור, לא תדע ש-P95 מגיע ל-5 שניות. מעקב אחר אחוזונים (P50, P95) נותן תמונה מלאה: ממוצעים מסתירים את הזנב שפוגע בחוויית המשתמש. הגדרת התראות רגרסיה עוזרת לתפוס ירידות בין גרסאות. אנו מגדירים ניטור טעינה ל-iOS ואנדרואיד באמצעות MetricKit ו-Firebase Performance – מגובה בניסיון של שנים ועשרות אינטגרציות. בעזרתנו תוכלו לקבל מערכת מדדים שקופה תוך יומיים ולהפסיק לנחש מה מאט את הטעינה. ההתקנה כוללת אינטגרציית SDK, יצירת דשבורד והגדרת התראות ב-Slack או בטלגרם. זה יכול לחסוך עד 40% מזמן הניפוי לרגרסיות ולהגדיל את שימור המשתמשים ב-5-10%.
ניטור מהירות טעינה: מה אנו מודדים ואיך
טעינה קרה — האפליקציה לא בזיכרון; התהליך נוצר מאפס. האיטית ביותר והקריטית ביותר לניטור. טעינה חמה (iOS) — האפליקציה הייתה בזיכרון אך הושהתה ברקע. התהליך חי, אבל viewDidLoad רץ שוב. טעינה חמה (Hot) — חזרה מרקע. כמעט מיידית. נטר טעינה קרה וחמה. טעינה חמה אינה אינדיקטיבית.
למה טעינה קרה היא המדד המרכזי
טעינה קרה היא הרושם הראשוני של המשתמש. אם היא עולה על 3 שניות, 5% מהמשתמשים עלולים לסגור את האפליקציה. ההמלצות לביצועים של אפל דורשות טעינה קרה מתחת ל-20 שניות, אבל הסבילות האמיתית היא סביב 2 שניות. ניטור P95 חושף את התרחיש הגרוע ביותר שממוצעים מסתירים.
איזה כלי ניטור לבחור לפרויקט שלך
הבחירה בין MetricKit ל-Firebase Performance תלויה בפלטפורמה ובדרישות לנתונים בזמן אמת. MetricKit אידיאלי לפרויקטים של iOS בלבד הזקוקים לסטטיסטיקות מצטברות מכל המשתמשים ללא SDK. Firebase Performance מתאים לאפליקציות חוצות-פלטפורמות ומספק נתונים בזמן אמת עם פילוח לפי מכשיר. למידע נוסף בתיעוד Firebase Performance.
איך להגדיר ניטור טעינה
- בחרו את הכלי: MetricKit או Firebase Performance.
- שלבו את ה-SDK בפרויקט.
- הוסיפו סמנים מותאמים אישית לזמן pre-main (iOS) או לאתחול (אנדרואיד).
- צרו דשבורד מדדים (P50, P95, התפלגות גרסאות).
- הגדירו התראות רגרסיה: הודעה אם P95 של טעינה קרה עולה ב-20% בהשוואה לגרסה הקודמת.
- אמתו איסוף נתונים במכשירים אמיתיים דרך TestFlight או Firebase App Distribution.
כלים מובנים בפלטפורמה
iOS — MetricKit. מאז iOS 13, המערכת אוספת אבחונים ממשתמשים אמיתיים ומספקת אותם דרך MXMetricManager:
class AppDelegate: MXMetricManagerSubscriber {
func applicationDidFinishLaunching() {
MXMetricManager.shared.add(self)
}
func didReceive(_ payloads: [MXMetricPayload]) {
for payload in payloads {
if let launchMetric = payload.applicationLaunchMetrics {
let coldLaunchP50 = launchMetric.histogrammedTimeToFirstDrawKey
.histogram(for: .applicationLaunchTimeToFirstDraw)
Analytics.track("cold_launch_p50", value: coldLaunchP50)
}
}
}
}MetricKit מספק נתונים פעם ביום, מצטברים על פני 24 השעות האחרונות. לא בזמן אמת, אבל מדגם אמיתי מכל המשתמשים.
אנדרואיד — Firebase Performance Monitoring. מעקב class AppDelegate: MXMetricManagerSubscriber { func applicationDidFinishLaunching() { MXMetricManager.shared.add(self) } func didReceive(_ payloads: [MXMetricPayload]) { for payload in payloads { if let launchMetric = payload.applicationLaunchMetrics { let coldLaunchP50 = launchMetric.histogrammedTimeToFirstDrawKey .histogram(for: .applicationLaunchTimeToFirstDraw) Analytics.track("cold_launch_p50", value: coldLaunchP50) } } } } נאסף אוטומטית כשמחברים את ה-SDK. הוא מפריד בין app_start ו-app_start_cold. זמין ב-Firebase Console עם פילוח לפי מכשיר, גרסת מערכת הפעלה וגרסת אפליקציה.
לסמנים מותאמים אישית באנדרואיד — app_start_warm + FirebasePerformance.getInstance().newTrace("custom_init") / start(). עוזר לזהות איזה אתחול מאט את התהליך.
איך למדוד זמן Pre-Main ב-iOS
זמן pre-main (טעינת מקשר דינמי, אתחול Objective-C runtime) אינו מכוסה במדידות סטנדרטיות ב-AppDelegate. הדרך היחידה לראות אותו היא להפעיל את משתנה הסביבה stop() ב-Xcode scheme. לאיסוף אוטומטי, השתמשו באינסטרומנטציה דרך MetricKit וספריות ייעודיות.
אינסטרומנטציה בקוד
גם ללא SDK חיצוניים, אפשר למדוד טעינה ידנית. iOS:
// В AppDelegate или @main
static let appLaunchTimestamp = Date()
// В viewDidAppear первого экрана
let launchDuration = Date().timeIntervalSince(AppDelegate.appLaunchTimestamp)
Analytics.track("cold_launch_duration", value: launchDuration)אבל שיטה זו אינה מדויקת — היא לא כוללת זמן pre-main (ספריות דינמיות, runtime). ל-pre-main: השתמשו במשתנה הסביבה DYLD_PRINT_STATISTICS ב-Xcode scheme.
אנדרואיד:
class App : Application() {
override fun onCreate() {
val start = SystemClock.elapsedRealtime()
super.onCreate()
// ... инициализации
val initDuration = SystemClock.elapsedRealtime() - start
FirebaseAnalytics.getInstance(this).logEvent("app_init_duration") {
param("duration_ms", initDuration)
}
}
}DYLD_PRINT_STATISTICS מדויק יותר מ-// В AppDelegate или @main static let appLaunchTimestamp = Date() // В viewDidAppear первого экрана let launchDuration = Date().timeIntervalSince(AppDelegate.appLaunchTimestamp) Analytics.track("cold_launch_duration", value: launchDuration) למדידת מרווחים.
דשבורד והתראות
קבוצת מדדים מינימלית לניטור:
| מדד | כלי | יעד |
|---|---|---|
| טעינה קרה P50 | Firebase / MetricKit | < 1.5 שניות |
| טעינה קרה P95 | Firebase / MetricKit | < 3.0 שניות |
| טעינה קרה לפי גרסה | Firebase | ללא עלייה |
| טעינות קרות איטיות (> 5 שניות) | Firebase | < 5% |
התראה על עליית P95 בין גרסאות חשובה יותר מערכים מוחלטים. רגרסיה של 500 אלפיות השנייה בין שתי גרסאות היא אות לחקור את ההבדל.
ב-Grafana או Firebase Alerts, הגדירו התראה: אם P95 של טעינה קרה בגרסה הנוכחית עולה על P95 של הגרסה הקודמת ב-20% — שלחו התראה ל-Slack.
השוואת כלים
| כלי | תדירות עדכון | חוצה-פלטפורמות | מדדים מותאמים אישית |
|---|---|---|---|
| MetricKit | פעם ביום | iOS בלבד | מוגבל |
| Firebase Performance | בזמן אמת | iOS + אנדרואיד | כן |
Firebase Performance עדיף לפרויקטים חוצי-פלטפורמות; MetricKit אם אתם צריכים נתונים מכל משתמשי iOS ללא SDK.
מה כלול בהתקנת ניטור
- אינטגרציה של MetricKit או Firebase Performance SDK.
- הגדרת איסוף נתוני טעינה קרה/חמה.
- יצירת דשבורד ב-Firebase Console או Grafana.
- הגדרת התראות רגרסיה (Slack, אימייל).
- תיעוד תפעולי והמלצות אופטימיזציה.
- הדרכת מפתחים – עד שעת ייעוץ אחת.
אנו מבטיחים שאחרי ההתקנה תראו P50, P95 והתפלגות זמני טעינה לפי גרסה ומכשיר.
לוחות זמנים: בין יום ליומיים לאינטגרציה בסיסית. נבחן את הפרויקט שלכם — צרו קשר לייעוץ. הזמינו התקנת ניטור טעינה סוהרת וקבלו מערכת מוכנה עם התראות.







