نظارت بر عملکرد عرضه ویژگی ها

۱. مرور کلی

در این آزمایشگاه کد، یاد خواهید گرفت که چگونه عملکرد برنامه خود را در طول انتشار یک ویژگی نظارت کنید. برنامه نمونه ما عملکردهای اولیه را خواهد داشت و برای نمایش یک تصویر پس زمینه متفاوت بر اساس یک پرچم Firebase Remote Config تنظیم شده است. ما به بررسی ردیابی‌های ابزار دقیق برای نظارت بر عملکرد برنامه، اعمال تغییر پیکربندی به برنامه، نظارت بر تأثیر آن و بررسی نحوه بهبود عملکرد خواهیم پرداخت.

آنچه یاد خواهید گرفت

  • نحوه اضافه کردن Firebase Performance Monitoring به برنامه تلفن همراه خود برای دریافت معیارهای آماده (مانند زمان شروع برنامه و فریم‌های کند یا یخ زده)
  • نحوه اضافه کردن ردپاهای سفارشی برای درک مسیرهای کد حیاتی سفرهای کاربر شما
  • نحوه استفاده از داشبورد نظارت بر عملکرد برای درک معیارهای خود و پیگیری تغییرات مهم مانند راه‌اندازی یک ویژگی
  • نحوه تنظیم هشدارهای عملکرد برای نظارت بر معیارهای کلیدی شما
  • چگونه یک تغییر در Firebase Remote Config اعمال کنیم؟

پیش‌نیازها

  • اندروید استودیو ۴.۰ یا بالاتر
  • یک شبیه‌ساز اندروید با API سطح ۱۶ یا بالاتر.
  • جاوا نسخه ۸ یا بالاتر
  • درک اولیه از پیکربندی ریموت فایربیس

۲. پروژه نمونه را تنظیم کنید

کد را دانلود کنید

دستور زیر را برای کپی کردن کد نمونه برای این codelab اجرا کنید. این کار پوشه‌ای به نام codelab-perf-rc-android در دستگاه شما ایجاد می‌کند:

$ git clone https://github.com/FirebaseExtended/codelab-feature-rollout-performance.git

اگر گیت را روی دستگاه خود ندارید، می‌توانید کد را مستقیماً از گیت‌هاب دانلود کنید.

پروژه را از پوشه firebase-perf-rc-android-start به اندروید استودیو ایمپورت کنید. احتمالاً با برخی خطاهای زمان اجرا یا شاید هشداری در مورد فقدان فایل google-services.json مواجه خواهید شد. این مورد را در بخش بعدی اصلاح خواهیم کرد.

در این آزمایشگاه کد، شما از افزونه Firebase Assistant برای ثبت برنامه اندروید خود در یک پروژه Firebase و اضافه کردن فایل‌های پیکربندی، افزونه‌ها و وابستگی‌های لازم Firebase به پروژه اندروید خود استفاده خواهید کرد - همه این‌ها از داخل اندروید استودیو !

برنامه خود را به Firebase وصل کنید

  1. برای اطمینان از اینکه از آخرین نسخه‌های اندروید استودیو و دستیار فایربیس استفاده می‌کنید، به Android Studio / Help > Check for updates بروید.
  2. برای باز کردن پنل دستیار (Assistant) ، از منوی Tools ، گزینه Firebase را انتخاب کنید.
    c0e42ef063d21eab.png
  3. برای افزودن به برنامه خود، Performance Monitoring را انتخاب کنید، سپس روی شروع به کار با Performance Monitoring کلیک کنید.
  4. برای اتصال پروژه اندروید خود به فایربیس، روی «اتصال به فایربیس» کلیک کنید. (این کار کنسول فایربیس را در مرورگر شما باز می‌کند.)
  5. برای ایجاد یک پروژه جدید، روی دکمه کلیک کنید و سپس نام پروژه را وارد کنید (برای مثال، Feature Rollout Performance Codelab ).
  6. روی ادامه کلیک کنید.
  7. در صورت درخواست، شرایط Firebase را مرور و قبول کنید و سپس روی ادامه کلیک کنید.
  8. (اختیاری) دستیار هوش مصنوعی را در کنسول Firebase (با نام "Gemini در Firebase") فعال کنید.
  9. برای این codelab، به گوگل آنالیتیکس نیاز ندارید ، بنابراین گزینه گوگل آنالیتیکس را غیرفعال کنید .
    شما می‌توانید به صورت اختیاری گوگل آنالیتیکس را فعال کنید زیرا گزینه‌های هدف‌گیری Remote Config گسترده‌تری را ارائه می‌دهد. با این حال، این codelab از گزینه هدف‌گیری استفاده می‌کند که نیازی به گوگل آنالیتیکس ندارد.
  10. در مرحله بعد، باید پنجره‌ای برای اتصال برنامه جدید Firebase خود به پروژه اندروید استودیو مشاهده کنید.
    51a549ebde2fe57a.png
  11. روی اتصال کلیک کنید.
  12. اندروید استودیو را باز کنید. در پنل دستیار (Assistant )، تأیید اتصال برنامه خود به فایربیس را مشاهده خواهید کرد.
    40c24c4a56a45990.png

نظارت بر عملکرد را به برنامه خود اضافه کنید

در پنل دستیار (Assistant) در اندروید استودیو، روی گزینه‌ی «افزودن نظارت بر عملکرد به برنامه» (Add Performance Monitoring to your app) کلیک کنید.

شما باید پنجره‌ای برای پذیرش تغییرات ببینید که پس از آن اندروید استودیو باید برنامه شما را همگام‌سازی کند تا اطمینان حاصل شود که تمام وابستگی‌های لازم اضافه شده‌اند.

3046f3e1f5fea06f.png

در نهایت، باید پیام موفقیت‌آمیزی را در پنل دستیار (Assistant) در اندروید استودیو مشاهده کنید که نشان می‌دهد همه وابستگی‌ها به درستی تنظیم شده‌اند.

62e79fd18780e320.png

به عنوان یک مرحله اضافی، با دنبال کردن دستورالعمل‌های مرحله "(اختیاری) فعال کردن ثبت گزارش اشکال‌زدایی"، ثبت گزارش اشکال‌زدایی را فعال کنید . همین دستورالعمل‌ها در مستندات عمومی نیز موجود است.

۳. برنامه را اجرا کنید

اکنون باید فایل google-services.json را در دایرکتوری ماژول (سطح برنامه) برنامه خود مشاهده کنید و برنامه شما اکنون باید کامپایل شود. در اندروید استودیو، روی Run > Run 'app' کلیک کنید تا برنامه را روی شبیه‌ساز اندروید خود بسازید و اجرا کنید.

وقتی برنامه اجرا می‌شود، ابتدا باید صفحه شروع مانند این را ببینید:

ffbd413a6983b205.png

سپس، پس از چند ثانیه، صفحه اصلی با تصویر پیش‌فرض نمایش داده می‌شود:

d946cab0df319e50.png

چه اتفاقی زیر کاپوت می‌افتد؟

صفحه نمایش شروع (splash screen) در SplashScreenActivity پیاده‌سازی شده است و موارد زیر را انجام می‌دهد:

  1. در onCreate() ، تنظیمات Firebase Remote Config را مقداردهی اولیه می‌کنیم و مقادیر پیکربندی را که بعداً در داشبورد Remote Config در این آزمایشگاه کد تنظیم خواهید کرد، دریافت می‌کنیم.
  2. در executeTasksBasedOnRC() ، مقدار پیکربندی پرچم seasonal_image_url را می‌خوانیم. اگر یک URL توسط مقدار پیکربندی ارائه شده باشد، تصویر را به صورت همزمان دانلود می‌کنیم.
  3. پس از اتمام دانلود، برنامه به MainActivity می‌رود و تابع finish() را برای پایان دادن به SplashScreenActivity فراخوانی می‌کند.

در MainActivity ، اگر seasonal_image_url از طریق Remote Config تعریف شده باشد، این ویژگی فعال می‌شود و تصویر دانلود شده به عنوان پس‌زمینه صفحه اصلی نمایش داده می‌شود. در غیر این صورت، تصویر پیش‌فرض (که در بالا نشان داده شده است) نمایش داده خواهد شد.

۴. پیکربندی از راه دور را تنظیم کنید

اکنون که برنامه شما در حال اجرا است، می‌توانید feature flag جدید را تنظیم کنید.

  1. در پنل سمت چپ کنسول Firebase ، بخش Engage را پیدا کنید، سپس روی Remote Config کلیک کنید.
  2. روی دکمه‌ی «ایجاد پیکربندی» کلیک کنید تا فرم پیکربندی باز شود و seasonal_image_url را به عنوان پارامتر کلیدی اضافه کنید.
  3. روی افزودن توضیحات کلیک کنید، سپس این توضیحات را وارد کنید: Shows a seasonal image (replaces default) in the main page when the restaurant list is empty.
  4. روی افزودن جدید -> مقدار شرطی -> ایجاد شرط جدید کلیک کنید.
  5. برای نام شرط، وارد Seasonal image rollout شوید.
  6. برای بخش Applies if... ، گزینه User in random percentile <= 0% را انتخاب کنید. (شما می‌خواهید این ویژگی را تا زمانی که در مرحله بعدی آماده انتشار شوید، غیرفعال نگه دارید.)
  7. روی ایجاد شرط کلیک کنید. بعداً از این شرط برای ارائه ویژگی جدید به کاربران خود استفاده خواهید کرد.

7a07526eb9e81623.png

  1. فرم «ایجاد اولین پارامتر» را باز کنید و فیلد « مقدار برای تصویر فصلی» را پیدا کنید. آدرس اینترنتی (URL) محل دانلود تصویر فصلی را وارد کنید: https://images.unsplash.com/photo-1552691021-7043334e0b51
  2. مقدار پیش‌فرض را به صورت یک رشته خالی بگذارید. این یعنی تصویر پیش‌فرض در کدبیس نمایش داده می‌شود، نه تصویری که از یک URL دانلود شده باشد.
  3. روی ذخیره کلیک کنید.

99e6cd2ebcdced.png

می‌بینید که پیکربندی جدید به عنوان پیش‌نویس ایجاد شده است.

  1. روی انتشار تغییرات کلیک کنید و تغییرات را در بالا تأیید کنید تا برنامه شما به‌روزرسانی شود.

39cd3e96d370c7ce.png

۵. نظارت بر زمان بارگذاری داده‌ها را اضافه کنید

برنامه شما قبل از نمایش MainActivity ، برخی داده‌ها را از قبل بارگذاری می‌کند و یک صفحه شروع (splash screen) نمایش می‌دهد تا این فرآیند را پنهان کند. شما نمی‌خواهید کاربرانتان خیلی طولانی در این صفحه منتظر بمانند، بنابراین معمولاً نظارت بر مدت زمان نمایش صفحه شروع مفید است.

نظارت بر عملکرد فایربیس راهی برای انجام این کار فراهم می‌کند. شما می‌توانید ردیابی کدهای سفارشی را برای نظارت بر عملکرد کد خاص در برنامه خود - مانند زمان بارگذاری داده‌ها و زمان پردازش ویژگی جدید خود - ابزار دقیق کنید.

برای ردیابی مدت زمان نمایش صفحه شروع، یک کد سفارشی به SplashScreenActivity اضافه خواهید کرد، که Activity ای است که صفحه شروع را پیاده سازی می کند.

  1. مقداردهی اولیه، ایجاد و شروع یک ردیابی کد سفارشی با نام splash_screen_trace :

SplashScreenActivity.java

// ...
import com.google.firebase.perf.FirebasePerformance;
import com.google.firebase.perf.metrics.Trace;
// ...

public class SplashScreenActivity extends AppCompatActivity {

    private static final String TAG = "SplashScreenActivity";
    private static final String SEASONAL_IMAGE_URL_RC_FLAG = "seasonal_image_url";

    // TODO: Initialize splash_screen_trace
    private final Trace splashScreenTrace = FirebasePerformance.startTrace("splash_screen_trace");
    
    // ...
}
  1. ردیابی را در متد onDestroy() از SplashScreenActivity پایان دهید:

SplashScreenActivity.java

@Override
protected void onDestroy() {
    super.onDestroy();

    // TODO: Stop the splash_screen_trace here
    splashScreenTrace.stop();
}

از آنجایی که ویژگی جدید شما یک تصویر را دانلود و پردازش می‌کند، یک ردیابی کد سفارشی دوم اضافه خواهید کرد که زمان اضافی اضافه شدن ویژگی شما به SplashScreenActivity را ردیابی می‌کند.

  1. مقداردهی اولیه، ایجاد و شروع یک ردیابی کد سفارشی با نام splash_seasonal_image_processing :

SplashScreenActivity.java

private void executeTasksBasedOnRC(FirebaseRemoteConfig rcConfig) {
    String seasonalImageUrl = rcConfig.getString(SEASONAL_IMAGE_URL_RC_FLAG);
    Log.d(TAG, SEASONAL_IMAGE_URL_RC_FLAG + ": " + seasonalImageUrl);

    if (!seasonalImageUrl.isEmpty()) {
        // TODO: Start the splash_seasonal_image_processing here
        final Trace seasonalImageProcessingTrace = FirebasePerformance
            .startTrace("splash_seasonal_image_processing");

        // ...
    }
}
  1. ردیابی را در هر دو متد onLoadFailed() و onResourceReady() از RequestListener پایان دهید:

SplashScreenActivity.java

Glide.with(SplashScreenActivity.this.getApplicationContext())
    .asBitmap()
    .load(seasonalImageUrl)
    .signature(new ObjectKey(Utils.getCacheUUID()))
    .listener(new RequestListener<Bitmap>() {
        @Override
        public boolean onLoadFailed(
            @Nullable GlideException e,
            Object model, Target<Bitmap> target,
            boolean isFirstResource) {

            // TODO: Stop the splash_seasonal_image_processing here
            seasonalImageProcessingTrace.stop();

            launchMainActivity();
            return true;
        }

        @Override
        public boolean onResourceReady(Bitmap resource, Object model,
            Target<Bitmap> target, DataSource dataSource,
            boolean isFirstResource) {

            // TODO: Stop the splash_seasonal_image_processing here
            seasonalImageProcessingTrace.stop();

            launchMainActivity();
            return true;
        }
     })
     .preload();

حالا که ردیابی‌های کد سفارشی را برای ردیابی مدت زمان صفحه شروع ( splash_screen_trace) و زمان پردازش ویژگی جدید ( splash_seasonal_image_processing ) اضافه کرده‌اید، برنامه را دوباره در اندروید استودیو اجرا کنید . باید یک پیام ثبت وقایع (logging) ببینید که شامل Logging trace metric: splash_screen_trace و به دنبال آن مدت زمان ردیابی است. شما پیام ثبت وقایعی برای splash_seasonal_image_processing نخواهید دید زیرا هنوز ویژگی جدید را فعال نکرده‌اید.

۶. یک ویژگی سفارشی به ردیابی اضافه کنید

برای ردیابی کدهای سفارشی، Performance Monitoring به طور خودکار ویژگی‌های پیش‌فرض (فراداده‌های رایج مانند نسخه برنامه، کشور، دستگاه و غیره) را ثبت می‌کند تا بتوانید داده‌ها را برای ردیابی در کنسول Firebase فیلتر کنید. همچنین می‌توانید ویژگی‌های سفارشی را اضافه و نظارت کنید.

در برنامه‌تان، شما به تازگی دو رد کد سفارشی برای نظارت بر مدت زمان نمایش اولیه صفحه (splash screen) و زمان پردازش ویژگی جدید اضافه کرده‌اید. عاملی که ممکن است بر این مدت زمان‌ها تأثیر بگذارد این است که آیا تصویر نمایش داده شده، تصویر پیش‌فرض است یا اینکه تصویر باید از یک URL دانلود شود. و چه کسی می‌داند - ممکن است در نهایت URL های مختلفی داشته باشید که از آنها یک تصویر را دانلود می‌کنید.

بنابراین، بیایید یک ویژگی سفارشی که نشان‌دهنده‌ی URL تصویر فصلی است را به این ردپاهای کد سفارشی اضافه کنیم. به این ترتیب، می‌توانید بعداً داده‌های مدت زمان را بر اساس این مقادیر فیلتر کنید.

  1. ویژگی سفارشی ( seasonal_image_url_attribute ) را برای splash_screen_trace در ابتدای متد executeTasksBasedOnRC اضافه کنید:

SplashScreenActivity.java

private void executeTasksBasedOnRC(FirebaseRemoteConfig rcConfig) {
    String seasonalImageUrl = rcConfig.getString(SEASONAL_IMAGE_URL_RC_FLAG);
    Log.d(TAG, SEASONAL_IMAGE_URL_RC_FLAG + ": " + seasonalImageUrl);

    // TODO: Add a custom attribute "seasonal_image_url_attribute" to splash_screen_trace
    if (seasonalImageUrl.isEmpty()) {
        splashScreenTrace.putAttribute("seasonal_image_url_attribute", "unset");
    } else {
        splashScreenTrace.putAttribute("seasonal_image_url_attribute", seasonalImageUrl);
    }

    // ...
}
  1. درست پس از فراخوانی startTrace("splash_seasonal_image_processing") ویژگی سفارشی مشابهی را برای splash_seasonal_image_processing اضافه کنید:

SplashScreenActivity.java

if (!seasonalImageUrl.isEmpty()) {
    // TODO: Start the splash_seasonal_image_processing here
    final Trace seasonalImageProcessingTrace = FirebasePerformance
        .startTrace("splash_seasonal_image_processing");

    // TODO: Add a custom attribute "seasonal_image_url_attribute" to splash_seasonal_image_processing
    seasonalImageProcessingTrace
        .putAttribute("seasonal_image_url_attribute", seasonalImageUrl);

    // ...
}

حالا که یک ویژگی سفارشی ( seasonal_image_url_attribute ) برای هر دو ردیابی سفارشی خود ( splash_screen_trace و splash_seasonal_image_processing ) اضافه کرده‌اید، برنامه را دوباره در اندروید استودیو اجرا کنید . باید یک پیام ثبت وقایع (logging) حاوی Setting attribute 'seasonal_image_url_attribute' to 'unset' on trace 'splash_screen_trace'. شما هنوز پارامتر Remote Config را فعال نکرده‌اید ، به همین دلیل مقدار ویژگی unset است.

SDK مانیتورینگ عملکرد، داده‌های ردیابی را جمع‌آوری کرده و به Firebase ارسال می‌کند. می‌توانید داده‌ها را در داشبورد عملکرد کنسول Firebase مشاهده کنید که در مرحله بعدی codelab به تفصیل توضیح خواهیم داد.

۷. داشبورد نظارت بر عملکرد خود را پیکربندی کنید

داشبورد خود را برای نظارت بر ویژگی خود پیکربندی کنید

در کنسول Firebase ، پروژه‌ای را که برنامه Friendly Eats شما روی آن قرار دارد، انتخاب کنید.

در پنل سمت چپ، بخش Release & Monitor را پیدا کنید، سپس روی Performance کلیک کنید.

شما باید داشبورد عملکرد خود را با اولین نقاط داده خود در صفحه معیارها ببینید! SDK نظارت بر عملکرد، داده‌های عملکرد را از برنامه شما جمع‌آوری کرده و ظرف چند دقیقه پس از جمع‌آوری، نمایش می‌دهد.

f57e5450b70034c9.png

این صفحه معیارها جایی است که می‌توانید معیارهای کلیدی برنامه خود را پیگیری کنید. نمای پیش‌فرض شامل مدت زمان ردیابی زمان شروع برنامه شما است، اما می‌توانید معیارهایی را که بیشتر به آنها اهمیت می‌دهید اضافه کنید. از آنجایی که در حال پیگیری ویژگی جدیدی هستید که اضافه کرده‌اید، می‌توانید داشبورد خود را طوری تنظیم کنید که مدت زمان ردیابی کد سفارشی splash_screen_trace نمایش دهد.

  1. روی یکی از کادرهای خالی Select a metric کلیک کنید.
  2. در پنجره‌ی محاوره‌ای، نوع ردیابی Custom traces و نام ردیابی splash_screen_trace انتخاب کنید.

۱fb81f4dba3220e0.png

  1. روی «انتخاب متریک» کلیک کنید، و باید مدت زمان splash_screen_trace را که به داشبورد شما اضافه شده است، ببینید!

شما می‌توانید از همین مراحل برای اضافه کردن سایر معیارهایی که برایتان مهم هستند استفاده کنید تا بتوانید به سرعت ببینید که عملکرد آنها چگونه در طول زمان و حتی با انتشار نسخه‌های مختلف تغییر می‌کند.

۱d465c021e58da3b.png

بورد معیارها ابزاری قدرتمند برای ردیابی عملکرد معیارهای کلیدی تجربه شده توسط کاربران شماست. برای این آزمایشگاه کد، شما مجموعه کوچکی از داده‌ها را در یک بازه زمانی محدود دارید، بنابراین از نماهای داشبورد دیگری استفاده خواهید کرد که به شما در درک عملکرد انتشار ویژگی کمک می‌کند.

۸. ویژگی خود را معرفی کنید

اکنون که مانیتورینگ خود را تنظیم کرده‌اید، آماده‌اید تا تغییر Firebase Remote Config ( seasonal_image_url) را که قبلاً تنظیم کرده‌اید، اعمال کنید.

برای اعمال یک تغییر، به صفحه Remote Config در کنسول Firebase برمی‌گردید تا درصد کاربر در شرایط هدف‌گیری خود را افزایش دهید. معمولاً ویژگی‌های جدید را برای بخش کوچکی از کاربران اعمال می‌کنید و فقط زمانی که مطمئن هستید مشکلی وجود ندارد، آن را افزایش می‌دهید. با این حال، در این آزمایشگاه کد، شما تنها کاربران برنامه هستید، بنابراین می‌توانید درصد را به ۱۰۰٪ تغییر دهید.

  1. روی برگه شرایط در بالای صفحه کلیک کنید.
  2. روی گزینه‌ی Seasonal image rollout که قبلاً اضافه کرده‌اید، کلیک کنید.
  3. درصد را به ۱۰۰٪ تغییر دهید.
  4. روی ذخیره شرط کلیک کنید.
  5. روی انتشار تغییرات کلیک کنید و تغییرات را تأیید کنید.

70f993502b27e7a0.png

به اندروید استودیو برگردید، برنامه را در شبیه‌ساز خود مجدداً راه‌اندازی کنید تا ویژگی جدید را ببینید. پس از صفحه شروع، باید صفحه اصلی جدید با حالت خالی را ببینید!

b0cc91b6e48fb842.png

۹. تغییرات عملکرد را بررسی کنید

حالا بیایید عملکرد بارگذاری صفحه شروع (splash screen loading) را با استفاده از داشبورد Performance در کنسول Firebase بررسی کنیم. در این مرحله از codelab، از بخش‌های مختلف داشبورد برای مشاهده داده‌های عملکرد استفاده خواهید کرد.

  1. در برگه اصلی داشبورد ، به پایین صفحه بروید تا به جدول ردپاها برسید، سپس روی برگه ردپاهای سفارشی کلیک کنید. در این جدول، ردپاهای کد سفارشی که قبلاً اضافه کرده‌اید به علاوه برخی ردپاهای آماده را مشاهده خواهید کرد.
  2. حالا که ویژگی جدید را فعال کرده‌اید، به دنبال کد سفارشی trace splash_seasonal_image_processing بگردید که زمان دانلود و پردازش تصویر را اندازه‌گیری می‌کرد. از مقدار Duration در trace، می‌توانید ببینید که این دانلود و پردازش زمان قابل توجهی طول می‌کشد.

439adc3ec71805b7.png

  1. از آنجایی که داده‌هایی برای splash_seasonal_image_processing دارید، می‌توانید مدت زمان این ردیابی را به صفحه معیارهای خود در بالای برگه داشبورد اضافه کنید.

مشابه قبل، روی یکی از کادرهای خالی Select a metric کلیک کنید. در پنجره محاوره‌ای، نوع ردیابی را Custom traces و نام ردیابی را splash_seasonal_image_processing انتخاب کنید. در نهایت، برای افزودن این معیار به صفحه معیارها، روی Select metric کلیک کنید.

7fb64d2340410576.png

  1. برای تأیید بیشتر تفاوت‌ها، می‌توانید نگاه دقیق‌تری به داده‌های splash_screen_trace بیندازید. روی کارت splash_screen_trace در صفحه معیارها کلیک کنید، سپس روی مشاهده جزئیات معیار کلیک کنید.

b1c275c30679062a.png

  1. در صفحه جزئیات، لیستی از ویژگی‌ها را در پایین سمت چپ، از جمله ویژگی سفارشی که قبلاً ایجاد کرده‌اید، مشاهده خواهید کرد. برای مشاهده مدت زمان نمایش اولیه هر URL تصویر فصلی در سمت راست، روی ویژگی سفارشی seasonal_image_url_attribute کلیک کنید:

8fa1a69019bb045e.png

  1. مقادیر مدت زمان صفحه شروع شما احتمالاً کمی متفاوت از مقادیر موجود در تصویر بالا خواهد بود، اما وقتی تصویر از یک URL دانلود می‌شود، در مقایسه با استفاده از تصویر پیش‌فرض (که با "unset" نشان داده شده است)، باید مدت زمان طولانی‌تری داشته باشید.

در این آزمایشگاه کد، دلیل این مدت زمان طولانی‌تر ممکن است سرراست باشد، اما در یک برنامه واقعی، ممکن است چندان واضح نباشد. داده‌های مدت زمان جمع‌آوری‌شده از دستگاه‌های مختلفی می‌آیند که برنامه را در شرایط اتصال شبکه مختلف اجرا می‌کنند و این شرایط می‌تواند بدتر از انتظار شما باشد. بیایید بررسی کنیم که اگر این یک وضعیت در دنیای واقعی بود، چگونه این مسئله را بررسی می‌کردید.

  1. برای بازگشت به برگه اصلی داشبورد ، روی عملکرد در بالای صفحه کلیک کنید: 640b696b79d90103.png
  2. در جدول ردیابی‌ها در پایین صفحه، روی برگه درخواست‌های شبکه کلیک کنید. در این جدول، تمام درخواست‌های شبکه از برنامه خود را که در الگوهای URL ، از جمله الگوی URL images.unsplash.com/** تجمیع شده‌اند، مشاهده خواهید کرد. اگر مقدار این زمان پاسخ را با زمان کلی صرف شده برای دانلود و پردازش تصویر (یعنی مدت زمان ردیابی splash_seasonal_image_processing ) مقایسه کنید، می‌توانید ببینید که مقدار زیادی از زمان صرف دانلود تصویر می‌شود.

6f92ce0f23494507.png

یافته‌های عملکرد

با استفاده از Firebase Performance Monitoring، تأثیر زیر را بر کاربران نهایی با فعال بودن ویژگی جدید مشاهده کردید:

  1. زمان صرف شده در SplashScreenActivity افزایش یافته است.
  2. مدت زمان splash_seasonal_image_processing بسیار زیاد بود.
  3. این تأخیر به دلیل زمان پاسخ برای دانلود تصویر و زمان پردازش مربوطه مورد نیاز برای تصویر بود.

در مرحله بعد، با بازگرداندن ویژگی به حالت اولیه و شناسایی چگونگی بهبود پیاده‌سازی آن، تأثیر آن بر عملکرد را کاهش خواهید داد.

۱۰. ویژگی را به حالت قبل برگردانید

افزایش زمان انتظار کاربران در طول صفحه شروع مطلوب نیست. یکی از مزایای کلیدی Remote Config، امکان مکث و معکوس کردن روند انتشار نسخه جدید بدون نیاز به انتشار نسخه دیگری برای کاربران است. این به شما امکان می‌دهد تا به سرعت به مشکلات (مانند مشکلات عملکردی که در مرحله قبل کشف کردید) واکنش نشان دهید و تعداد کاربران ناراضی را به حداقل برسانید.

به عنوان یک راهکار سریع، درصد نمایش را به 0 بازنشانی می‌کنید تا همه کاربران شما دوباره تصویر پیش‌فرض را ببینند:

  1. به صفحه Remote Config در کنسول Firebase برگردید.
  2. روی گزینه شرایط در بالای صفحه کلیک کنید.
  3. روی شرط Seasonal image rollout قبلاً اضافه کرده‌اید کلیک کنید.
  4. درصد را به 0٪ تغییر دهید.
  5. روی ذخیره شرط کلیک کنید.
  6. روی انتشار تغییرات کلیک کنید و تغییرات را تأیید کنید.

18c4f1cbac955a04.png

برنامه را در اندروید استودیو مجدداً راه‌اندازی کنید، و باید صفحه اصلی با حالت خالی اولیه را ببینید:

d946cab0df319e50.png

۱۱. مشکلات عملکرد را برطرف کنید

شما قبلاً در codelab متوجه شدید که دانلود یک تصویر برای صفحه شروع برنامه‌تان باعث کندی آن می‌شود. با نگاهی دقیق‌تر به تصویر دانلود شده، می‌بینید که از وضوح اصلی تصویر استفاده می‌کنید که بیش از ۲ مگابایت بود! یک راه حل سریع برای مشکل عملکرد شما، کاهش کیفیت به وضوح مناسب‌تر است تا دانلود تصویر زمان کمتری ببرد.

مقدار Remote Config را دوباره فعال کنید.

  1. به صفحه Remote Config در کنسول Firebase برگردید.
  2. روی آیکون ویرایش برای پارامتر seasonal_image_url کلیک کنید.
  3. بخش Value for Seasonal image را به https://images.unsplash.com/photo-1552691021-7043334e0b51?w=640 به‌روزرسانی کنید، سپس روی ذخیره کلیک کنید.

828dd1951a2ec4a4.png

  1. روی برگه «شرایط» در بالای صفحه کلیک کنید.
  2. روی منوی تصویر فصلی کلیک کنید، سپس درصد را دوباره روی ۱۰۰٪ تنظیم کنید.
  3. روی ذخیره شرط کلیک کنید.

1974fa3bb789f36c.png

  1. روی دکمه‌ی انتشار تغییرات کلیک کنید.

۱۲. رفع مشکل را آزمایش کنید و هشدارها را تنظیم کنید

اجرای برنامه به صورت محلی

با تنظیم مقدار پیکربندی جدید برای استفاده از یک URL تصویر دانلود متفاوت، برنامه را دوباره اجرا کنید. این بار، باید متوجه شوید که زمان صرف شده در صفحه شروع کوتاه‌تر از قبل است.

b0cc91b6e48fb842.png

مشاهده عملکرد تغییرات

برای مشاهده‌ی نحوه‌ی نمایش معیارها، به داشبورد Performance در کنسول Firebase برگردید.

  1. این بار از جدول ردیابی‌ها برای پیمایش به صفحه جزئیات استفاده خواهید کرد. در جدول ردیابی‌ها، در تب ردیابی‌های سفارشی ، روی ردیابی سفارشی splash_seasonal_image_processing کلیک کنید تا دوباره نمای دقیق‌تری از معیار مدت زمان آن را ببینید.

2d7aaca03112c062.png

  1. برای مشاهده‌ی جزئیات ویژگی‌های سفارشی، دوباره روی ویژگی سفارشی seasonal_image_url_attribute کلیک کنید. اگر نشانگر ماوس را روی URLها نگه دارید، مقداری را مشاهده خواهید کرد که با URL جدید برای تصویر کوچک‌شده مطابقت دارد: https://images.unsplash.com/photo-1552691021-7043334e0b51?w=640 (با ?w=640 در انتها). مقدار مدت زمان مرتبط با این تصویر به طور قابل توجهی کوتاه‌تر از مقدار تصویر قبلی است و برای کاربران شما قابل قبول‌تر است!

10e30c037a4237a2.png

  1. حالا که عملکرد صفحه شروع خود را بهبود بخشیده‌اید، می‌توانید هشدارهایی تنظیم کنید تا وقتی اثری از آستانه‌ای که تعیین کرده‌اید فراتر می‌رود، به شما اطلاع دهند. داشبورد عملکرد را باز کنید و روی نماد منوی سرریز (سه نقطه) برای splash_screen_trace کلیک کنید و روی تنظیمات هشدار کلیک کنید.

4bd0a2a1faa14479.png

  1. برای فعال کردن هشدار مدت زمان ، روی ضامن کلیک کنید. مقدار آستانه را کمی بالاتر از مقداری که مشاهده می‌کردید تنظیم کنید تا اگر splash_screen_trace شما از آستانه فراتر رفت، یک ایمیل دریافت کنید.
  1. برای ایجاد هشدار، روی ذخیره کلیک کنید. به پایین صفحه بروید تا به جدول ردپاها برسید، سپس روی برگه ردپاهای سفارشی کلیک کنید تا ببینید هشدار شما فعال شده است!

2bb93639e2218d1.png

۱۳. تبریک می‌گویم!

تبریک! شما SDK نظارت بر عملکرد Firebase را فعال کردید و ردیابی‌هایی را برای اندازه‌گیری عملکرد یک ویژگی جدید جمع‌آوری کردید! شما معیارهای کلیدی عملکرد را برای راه‌اندازی یک ویژگی جدید نظارت کردید و هنگامی که یک مشکل عملکردی کشف شد، به سرعت واکنش نشان دادید. همه این‌ها با امکان ایجاد تغییرات پیکربندی با Remote Config و نظارت بر مشکلات عملکردی به صورت بلادرنگ امکان‌پذیر بود.

آنچه ما پوشش داده‌ایم

  • افزودن SDK نظارت بر عملکرد Firebase به برنامه شما
  • اضافه کردن یک ردیابی کد سفارشی به کد شما برای اندازه‌گیری یک ویژگی خاص
  • تنظیم پارامتر Remote Config و مقدار شرطی برای کنترل/اجرای یک ویژگی جدید
  • آشنایی با نحوه استفاده از داشبورد نظارت بر عملکرد برای شناسایی مشکلات در طول یک دوره انتشار
  • تنظیم هشدارهای عملکرد برای اطلاع‌رسانی به شما در صورت عبور عملکرد برنامه از آستانه‌ای که تعیین کرده‌اید

بیشتر بدانید