Firebase Performance Monitoring یک ابزار رایگان از Google برای ردیابی عملکرد برنامههای موبایل در زمان واقعی است. این سرویس به طور خودکار معیارهای زمان راهاندازی، سرعت رندر صفحهها و مدت زمان درخواستهای HTTP را جمعآوری میکند، بدون اینکه برای سناریوهای پایه نیاز به نوشتن کد داشته باشد. طبق دادههای Google Firebase, 2025، SDK بدون پیکربندی اضافی تا 90% از درخواستهای شبکه را به طور خودکار ردیابی میکند. این ابزار برای Android، iOS و برنامههای وب در چارچوب اکوسیستم Firebase در دسترس است.
نکات کلیدی
Firebase Performance Monitoring یک سرویس ابری Google است که معیارهای عملکرد برنامههای موبایل را جمعآوری و نمایش میدهد. این سرویس بخشی از مجموعه ابزارهای Firebase است و نیاز به پرداخت جداگانه ندارد — نظارت در چارچوب تعرفه رایگان Spark (محدودیت ۵۰۰٬۰۰۰ رویداد در روز) و تعرفه پولی Blaze در دسترس است. Firebase Performance به طور خودکار برای سناریوهای استاندارد ردیابی تولید میکند: cold start صفحه، warm start، درخواستهای HTTP پسزمینه.
معماری سرویس بر دو نوع داده ساخته شده است: traces (ردیابیها) و metrics (معیارها). ردیابی یک بازه زمانی با شروع و پایان است که در داخل آن مدت زمان اجرا اندازهگیری میشود. معیار یک مقدار عددی است: اندازه پاسخ، فراوانی خطاها، سرعت بر حسب بایت/ثانیه. هر ردیابی میتواند شامل چندین معیار باشد. SDK دادهها را روی دستگاه جمعآوری میکند، بافر میکند و با اولویت تأخیر کم در پسزمینه به Firebase میفرستد تا بر تجربه کاربر تأثیر نگذارد.
طبق گزارش Google I/O 2024، Firebase Performance در بیش از ۲ میلیون برنامه در سراسر جهان استفاده میشود. میانگین زمان تشخیص مشکل عملکرد با استفاده از Firebase Performance در صورت تنظیم هشدارها، ۱۵ دقیقه پس از انتشار است. بدون نظارت، مشکل مشابه به طور متوسط پس از ۲-۳ روز بر اساس شکایت کاربران به پشتیبانی تشخیص داده میشود.
Crashlytics خرابیها و خطاهای مهلک — موقعیتهایی که برنامه به طور ناگهانی متوقف میشود را ردیابی میکند. Firebase Performance عملکرد برنامه در حال اجرا را نظارت میکند: صفحههای کند، درخواستهای طولانی شبکه، تأخیرهای پاسخ UI. Crashlytics به سؤال «چرا برنامه خراب شد؟» پاسخ میدهد، در حالی که Performance به سؤال «چرا برنامه کند کار میکند؟» پاسخ میدهد. هر دو سرویس از طریق یک SDK (Firebase Core) ادغام میشوند و دادهها در بخشهای مرتبط کنسول Firebase نمایش داده میشوند.
Firebase Performance مقادیر متوسط را نشان نمیدهد — فقط درصدکها را نشان میدهد: P50, P75, P90, P95, P99. این برای عملکرد حیاتی است: زمان متوسط مقادیر پرت را پنهان میکند. اگر ۹۹ کاربر صفحه را در ۲۰۰ میلیثانیه باز کنند و یکی در ۲۰ ثانیه، میانگین ~۴۰۰ میلیثانیه خواهد بود که قابل قبول به نظر میرسد. P99 ۲۰ ثانیه را نشان میدهد — مشکل واقعی. Firebase درصدکها را بر روی محور زمان نمایش میدهد که امکان ردیابی پسرفتها با دقت تا یک ساعت را فراهم میکند.
Firebase Performance SDK از طریق ادغام استاندارد به برنامه وارد میشود: اضافه کردن وابستگی در Gradle (Android) یا از طریق CocoaPods (iOS). پس از مقداردهی Firebase در کد، SDK به طور خودکار بدون پیکربندی اضافی جمعآوری معیارها را آغاز میکند. اصل مهم کار — lazy collection: SDK دادهها را بلافاصله ارسال نمیکند، بلکه آنها را جمع میکند و در شرایط مساعد شبکه به صورت دستهای ارسال میکند.
برای iOS، SDK از NSURLProtocol برای رهگیری درخواستهای HTTP استفاده میکند، برای Android — OkHttp Interceptor. اگر برنامه از OkHttp استفاده نمیکند، SDK به طور خودکار HttpURLConnection را میپوشاند. درخواستهای رهگیری شده با فراداده غنی میشوند: Content-Type، وضعیت پاسخ، اندازه بر حسب بایت، مدت زمان. همه دادهها از طریق HTTPS با رمزنگاری TLS 1.3 به سرور Firebase ارسال میشوند.
یکی از الزامات کلیدی Firebase Performance — آخرین پلاگین بودن در لیست پلاگینهای Gradle است. اگر ترتیب نقض شود، SDK ممکن است همه درخواستها را رهگیری نکند یا زمان راهاندازی را به درستی اندازهگیری نکند. Firebase توصیه میکند پلاگین را در انتهای بلوک plugins، پس از Crashlytics و سایر پلاگینهای Google Services قرار دهید.
// build.gradle (Module: app) — ترتیب صحیح پلاگینها
plugins {
id "com.android.application"
id "org.jetbrains.kotlin.android"
id "com.google.gms.google-services"
id "com.google.firebase.crashlytics"
id "com.google.firebase.firebase-perf" // آخرین!
}
dependencies {
implementation platform("com.google.firebase:firebase-bom:33.0.0")
implementation "com.google.firebase:firebase-perf"
}
Firebase Performance سه نوع ردیابی خودکار ایجاد میکند: screen trace (زمان رندر صفحه)، app start trace (زمان راهاندازی برنامه) و network request trace (درخواستهای HTTP). Screen trace برای Android زمان بین فراخوانی Activity.onCreate و تکمیل رندر اولین فریم را اندازهگیری میکند. برای iOS زمان بین viewDidLoad و viewDidAppear اندازهگیری میشود. Firebase به طور خودکار برای هر صفحه با استفاده از نام کلاس Activity یا ViewController ردیابی ایجاد میکند.
App start trace به دو نوع تقسیم میشود: cold start (برنامه از صفر راهاندازی میشود، فرآیند وجود نداشت) و warm start (برنامه از حالت پسزمینه بازیابی میشود). Cold start حیاتیترین شاخص است زیرا شامل مقداردهی همه SDKها، بارگذاری فایلهای DEX و ایجاد اولین Activity است. Firebase cold start را از لحظه شروع فرآیند تا رندر کامل اولین صفحه اندازهگیری میکند. طبق توصیههای Google، cold start نباید از ۵۰۰ میلیثانیه برای P50 و ۲ ثانیه برای P99 تجاوز کند.
Network request trace به طور خودکار هر درخواست HTTP را با فراداده ثبت میکند: URL، روش، کد پاسخ، اندازه پاسخ، سرعت انتقال. در کنسول Firebase Performance میتوان درخواستها را بر اساس الگوی URL فیلتر کرد — مثلاً همه درخواستها به /api/v2/orders را نشان داد. برای هر الگو، درصدکهای زمان پاسخ و فراوانی خطاهای 4xx/5xx نمایش داده میشود. این امکان را فراهم میکند که بدون تنظیم هشدارهای جداگانه، تخریب یک API خاص را به سرعت تشخیص دهید.
برای صفحهها، Firebase Performance علاوه بر این “frozen frames” metric را محاسبه میکند — فریمهایی که بیش از ۷۰۰ میلیثانیه رندر شدهاند. چنین یخزدگیهای UI توسط کاربر به عنوان «برنامه مسدود شد» درک میشود. اگر در یک صفحه بیش از ۱٪ frozen frames وجود داشته باشد، Firebase معیار را به عنوان مشکلدار علامتگذاری میکند. برای Android SDK علاوه بر این معیار slow renders — فریمهای بیشتر از ۱۶ میلیثانیه (از دست دادن ۶۰ FPS) را جمعآوری میکند. ترکیب screen trace و frozen frames تصویر کاملی هم از زمان بارگذاری و هم از روانی انیمیشنها ارائه میدهد.
ردیابیهای سفارشی به شما امکان میدهند مدت زمان هر سناریوی کاربری را اندازهگیری کنید: ثبت سفارش، بارگذاری تصویر در ابر، همگامسازی دادهها. توسعهدهنده به صراحت شروع و پایان ردیابی را در کد مشخص میکند و نام سناریو را تعیین میکند. بر خلاف ردیابیهای خودکار، ردیابیهای سفارشی کنترل کامل بر آنچه اندازهگیری میشود میدهند و امکان اضافه کردن ویژگیها برای فیلتر کردن را فراهم میکنند.
هر ردیابی سفارشی میتواند شامل ویژگیها — جفتهای کلید-مقدار باشد که به عنوان فراداده اضافه میشوند. ویژگیها به بخشبندی دادهها کمک میکنند: مثلاً میتوان زمان ثبت سفارش را جداگانه برای “promo_user” و “regular_user” ردیابی کرد. Firebase Performance تا ۵ ویژگی در هر ردیابی و تا ۱۰۰ مقدار منحصربهفرد ویژگی را پشتیبانی میکند. ویژگیها ایندکس میشوند و برای فیلتر کردن در کنسول Firebase در دسترس هستند.
طبق گزارش Google I/O 2024، تیم Spotify از ردیابیهای سفارشی Firebase برای نظارت بر زمان جابجایی بین آهنگها استفاده میکند. این کار باعث کاهش متوسط زمان جابجایی از ۴۰۰ میلیثانیه به ۱۲۰ میلیثانیه با شناسایی تنگنا در کشِ بافر صوتی شد. بینش کلیدی فیلتر کردن بر اساس ویژگی “device_model” بود — مشکل فقط در دستگاههای Samsung با Android 13 ظاهر میشد.
import com.google.firebase.perf.FirebasePerformance
import com.google.firebase.perf.metrics.Trace
class CheckoutTracker {
private val firebasePerf = FirebasePerformance.getInstance()
fun trackCheckoutFlow(userId: String, promoApplied: Boolean) {
val trace: Trace = firebasePerf.newTrace("checkout_flow")
trace.putAttribute("promo_user", promoApplied.toString())
trace.putAttribute("user_tier", "premium")
trace.start()
// اجرای سناریوی ثبت سفارش
validateCart()
processPayment()
confirmOrder()
trace.stop()
}
}
ادغام Firebase Performance در Android به سه مرحله نیاز دارد: اضافه کردن پلاگین google-services، اتصال BOM (Bill of Materials) Firebase و اضافه کردن وابستگی firebase-perf. Firebase Performance به طور خودکار روی همه Activity و fragmentها کار میکند اگر از AppCompatActivity استفاده کنند. برای صفحههای Compose، Firebase توصیه میکند از ردیابیهای سفارشی استفاده کنید زیرا screen trace خودکار مستقیماً از Compose پشتیبانی نمیکند.
نکته مهم: پلاگین Gradle Firebase Performance کد بایت برنامه را در مرحله کامپایل تغییر میدهد. پلاگین کد ابزاری را به هر Activity و کلاینت OkHttp اضافه میکند. این میتواند زمان ساخت را ۵-۱۰٪ و اندازه APK را ۲۰۰-۴۰۰ کیلوبایت افزایش دهد. در ساختهای debug، Firebase Performance به طور خودکار غیرفعال میشود — این از تحریف معیارها در توسعه محلی محافظت میکند. برای فعالسازی اجباری در debug از پرچم firebasePerformanceInstrumentationEnabled در مانیفست استفاده میشود.
Firebase Performance همچنین از MetricKit برای iOS و Perfetto برای Android — ردیابهای سطح پایین سیستم پشتیبانی میکند. MetricKit دادههایی درباره نرخ فریم، مصرف CPU و حافظه در سطح سیستم عامل ارائه میدهد. Firebase این دادهها را جمعآوری کرده و در همان کنسولی که ردیابیهای HTTP و screen traces نمایش داده میشوند نشان میدهد و تلهمتری سیستم و برنامه را در یک رابط ترکیب میکند.
import okhttp3.OkHttpClient
import com.google.firebase.perf.network.FirebasePerfOkHttpClient
val client = OkHttpClient.Builder()
.addInterceptor FirebasePerfOkHttpClient
.build()
val request = Request.Builder()
.url("https://api.example.com/orders")
.build()
client.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) { /* handle */ }
override fun onResponse(call: Call, response: Response) { /* handle */ }
})
برای iOS، ادغام Firebase Performance از طریق CocoaPods یا Swift Package Manager انجام میشود. پس از نصب پادهای FirebasePerformance و FirebaseCore، SDK به طور خودکار جمعآوری معیارها را آغاز میکند. برای رهگیری درخواستهای HTTP، Firebase Performance iOS از NSURLProtocol استفاده میکند — مکانیزم سیستمی که امکان رهگیری همه بارگذاریهای URL در برنامه را فراهم میکند. SDK زیرکلاس NSURLProtocol خود را در هنگام راهاندازی ثبت میکند و همه درخواستها از طریق URLSession به طور خودکار تحت نظارت قرار میگیرند.
محدودیت برای iOS: Firebase Performance از screen trace خودکار برای SwiftUI پشتیبانی نمیکند. برای برنامههای SwiftUI لازم است به صورت دستی ردیابیهای سفارشی ایجاد کنید و بدنه View را در بلوک start/stop قرار دهید. Firebase روی پشتیبانی بومی SwiftUI کار میکند، اما در حال حاضر SDK به طور خودکار فقط کنترلرهای UIView را ردیابی میکند. برای برنامههای ترکیبی UIKit + SwiftUI توصیه میشود صفحهها را در UIKit ایجاد کنید و SwiftUI را از طریق UIHostingController جاسازی کنید.
Firebase Performance iOS همچنین ادغام با MetricKit — فریمورک Apple که دادههای تشخیصی را در سطح سیستم عامل جمعآوری میکند، ارائه میدهد. MetricKit گزارشهای روزانه با معیارهای CPU، GPU، حافظه و نرخ فریم ارسال میکند. Firebase Performance این گزارشها را جمعآوری کرده و در کنسول در کنار ردیابیهای سفارشی نمایش میدهد که تصویر کاملی از عملکرد هم در سطح برنامه و هم در سطح سیستم ارائه میدهد.
import FirebasePerformance
final class ImageUploadService {
func uploadImage(_ data: Data, to url: URL) async throws {
guard let trace = Performance.startTrace(name: "image_upload") else { return }
trace?.setValue("image/jpeg", forAttribute: "content_type")
trace?.setValue("\(data.count)", forAttribute: "file_size")
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = data
let (_, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else { return }
trace?.setValue("\(httpResponse.statusCode)",
forAttribute: "status_code")
trace?.stop()
}
}
سوالات متداول
بله، Firebase Performance در تعرفه رایگان Spark با محدودیت ۵۰۰٬۰۰۰ رویداد در روز در دسترس است. برای پروژههای با حجم داده بیشتر از تعرفه Blaze با پرداخت بر اساس مصرف استفاده میشود: ۰.۰۰۰۳ دلار به ازای هر ۱۰۰۰ رویداد بیش از حد مجاز. برای اکثر استارتاپها و پروژههای متوسط ۵۰۰٬۰۰۰ رویداد در روز کاملاً کافی است.
Firebase Performance SDK برای حداقل تأثیر بهینه شده است. ارسال دادهها در رشته پسزمینه با اولویت پایین انجام میشود. طبق آزمایشهای Google، تأثیر SDK بر زمان راهاندازی کمتر از ۱٪ است. اندازه SDK حدود ۳۰۰ کیلوبایت برای Android و ۲۵۰ کیلوبایت برای iOS است.
به طور خودکار app start (cold/warm)، screen rendering (زمان رندر هر صفحه)، درخواستهای HTTP (زمان، اندازه، وضعیت) و frozen frames جمعآوری میشوند. برای Android علاوه بر این فراوانی slow renders (>۱۶ میلیثانیه) و ANR جمعآوری میشود.
Firebase Performance به طور خودکار در حالت debug غیرفعال میشود. برای کنترل اجباری از پرچم در مانیفست Android استفاده میشود: firebasePerformanceInstrumentationEnabled. برای iOS غیرفعالسازی از طریق پرچم -FIRPerformanceEnabled NO در آرگومانهای طرح راهاندازی انجام میشود.
بله، Firebase Performance از صدور به BigQuery پشتیبانی میکند. پس از اتصال پروژه به BigQuery، همه معیارها به طور خودکار به جداول BigQuery کپی میشوند که برای پرسوجوهای SQL و ایجاد داشبورد در Looker Studio در دسترس هستند. صدور در بخش Integrations کنسول Firebase پیکربندی میشود.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید