مراقبة الأداء لعمليات طرح الميزات

1. نظرة عامة

في هذا الدرس العملي، ستتعرّف على كيفية مراقبة أداء تطبيقك أثناء طرح ميزة. سيتضمّن تطبيقنا النموذجي وظائف أساسية، وسيتم إعداده لعرض صورة خلفية مختلفة استنادًا إلى علامة "الإعداد عن بُعد في Firebase". سنتناول عملية تتبُّع آثار الأخطاء لمراقبة أداء التطبيق، وطرح تغيير في إعدادات التطبيق، ومراقبة التأثير، ومعرفة كيفية تحسين الأداء.

أهداف الدورة التعليمية

  • كيفية إضافة خدمة "مراقبة أداء Firebase" إلى تطبيقك على الأجهزة الجوّالة للحصول على مقاييس جاهزة للاستخدام (مثل وقت بدء تشغيل التطبيق واللقطات البطيئة أو المجمدة)
  • كيفية إضافة عمليات تتبُّع مخصّصة لفهم مسارات الرموز البرمجية المهمة لتجارب المستخدمين
  • كيفية استخدام لوحة بيانات "مراقبة الأداء" لفهم المقاييس وتتبُّع التغييرات المهمة، مثل طرح ميزة
  • كيفية إعداد تنبيهات الأداء لمراقبة مقاييسك الرئيسية
  • كيفية طرح تغيير في ميزة "الإعداد عن بُعد في Firebase"

المتطلبات الأساسية

  • الإصدار 4.0 من "استوديو Android" أو إصدار أحدث
  • محاكي Android بالمستوى 16 لواجهة برمجة التطبيقات أو مستوى أعلى
  • الإصدار 8 من Java أو إصدار أحدث
  • فهم أساسي لميزة الإعداد عن بُعد في Firebase

2. إعداد المشروع النموذجي

تنزيل الرمز

نفِّذ الأمر التالي لاستنساخ الرمز النموذجي لهذا الدرس العملي. سيؤدي ذلك إلى إنشاء مجلد باسم codelab-perf-rc-android على جهازك:

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

إذا لم يكن لديك Git على جهازك، يمكنك أيضًا تنزيل الرمز مباشرةً من GitHub.

استورِد المشروع ضِمن المجلد firebase-perf-rc-android-start إلى "استوديو Android". من المحتمل أن تظهر لك بعض استثناءات وقت التشغيل أو ربما تحذير بشأن ملف google-services.json مفقود. سنوضّح هذا الأمر في القسم التالي.

في هذا الدرس العملي، ستستخدم المكوّن الإضافي مساعد Firebase لتسجيل تطبيق Android في مشروع Firebase وإضافة ملفات الإعداد والمكوّنات الإضافية والتبعيات اللازمة في Firebase إلى مشروع Android، كل ذلك من داخل "استوديو Android".

ربط تطبيقك بمنصّة Firebase

  1. انتقِل إلى استوديو Android/مساعدة > البحث عن تحديثات للتأكّد من أنّك تستخدم أحدث إصدارات "استوديو Android" و"مساعِد Firebase".
  2. انقر على الأدوات > Firebase لفتح لوحة المساعد.
    c0e42ef063d21eab.png
  3. اختَر مراقبة الأداء لإضافتها إلى تطبيقك، ثم انقر على البدء في استخدام "مراقبة الأداء".
  4. انقر على الربط بخدمة Firebase لربط مشروع Android بخدمة Firebase. (سيؤدي ذلك إلى فتح وحدة تحكّم Firebase في المتصفّح).
  5. انقر على الزر لإنشاء مشروع جديد، ثم أدخِل اسم المشروع (على سبيل المثال، Feature Rollout Performance Codelab).
  6. انقر على متابعة.
  7. إذا طُلب منك ذلك، راجِع بنود Firebase واقبلها، ثم انقر على متابعة.
  8. (اختياري) فعِّل ميزة "المساعدة المستندة إلى الذكاء الاصطناعي" في وحدة تحكّم Firebase (المعروفة باسم "Gemini في Firebase").
  9. في هذا الدرس العملي، لا تحتاج إلى "إحصاءات Google"، لذا أوقِف خيار "إحصاءات Google".
    يمكنك تفعيل "إحصاءات Google" اختياريًا لأنّها ستوفّر خيارات استهداف موسّعة في Remote Config. ومع ذلك، يستخدم هذا الدرس العملي خيار استهداف لا يتطلّب "إحصاءات Google".
  10. بعد ذلك، من المفترض أن يظهر لك مربّع حوار ربط تطبيق Firebase الجديد بمشروعك على "استوديو Android".
    51a549ebde2fe57a.png
  11. انقر على ربط.
  12. افتح "استوديو Android". في لوحة المساعد، سيظهر لك تأكيد بأنّ تطبيقك مرتبط بمنصة Firebase.
    40c24c4a56a45990.png

إضافة خدمة "مراقبة الأداء" إلى تطبيقك

في لوحة المساعد في "استوديو Android"، انقر على إضافة أداة "مراقبة الأداء" إلى تطبيقك.

من المفترض أن يظهر مربّع حوار قبول التغييرات، وبعد ذلك يجب أن يزامن Android Studio تطبيقك للتأكّد من إضافة جميع التبعيات اللازمة.

3046f3e1f5fea06f.png

أخيرًا، من المفترض أن تظهر لك رسالة النجاح في لوحة المساعد في Android Studio بأنّه تم إعداد جميع التبعيات بشكلٍ صحيح.

62e79fd18780e320.png

كخطوة إضافية، فعِّل تسجيل بيانات تصحيح الأخطاء باتّباع التعليمات الواردة في الخطوة "(اختياري) تفعيل تسجيل بيانات تصحيح الأخطاء". تتوفّر التعليمات نفسها أيضًا في المستندات المتاحة للجميع.

3- تشغيل التطبيق

من المفترض أن يظهر ملف google-services.json الآن في دليل الوحدة (على مستوى التطبيق) لتطبيقك، ومن المفترض أن يتم تجميع تطبيقك الآن. في "استوديو Android"، انقر على تشغيل (Run) > تشغيل "التطبيق" (Run ‘app’) لإنشاء التطبيق وتشغيله على محاكي Android.

عند تشغيل التطبيق، من المفترض أن تظهر لك أولاً شاشة بداية على النحو التالي:

ffbd413a6983b205.png

بعد ذلك، ستظهر بعد بضع ثوانٍ الصفحة الرئيسية التي تتضمّن الصورة التلقائية:

d946cab0df319e50.png

ما الذي يحدث في الخلفية؟

يتم تنفيذ شاشة البداية في SplashScreenActivity وتنفّذ ما يلي:

  1. في onCreate()، نهيئ إعدادات ميزة "الإعداد عن بُعد" من Firebase ونجلب قيم الإعدادات التي ستضبطها في لوحة بيانات "الإعداد عن بُعد" لاحقًا في هذا الدرس العملي.
  2. في executeTasksBasedOnRC()، نقرأ قيمة الإعداد الخاصة بالعلامة seasonal_image_url. إذا تم توفير عنوان URL من خلال قيمة الإعداد، سننزّل الصورة بشكل متزامن.
  3. بعد اكتمال التنزيل، ينتقل التطبيق إلى MainActivity ويطلب finish() لإنهاء SplashScreenActivity.

في MainActivity، إذا تم تحديد seasonal_image_url من خلال "الإعداد عن بُعد"، سيتم تفعيل الميزة وسيتم عرض الصورة التي تم تنزيلها كخلفية للصفحة الرئيسية. بخلاف ذلك، سيتم عرض الصورة التلقائية (الموضّحة أعلاه).

4. إعداد خدمة "الإعداد عن بُعد"

بعد تشغيل تطبيقك، يمكنك إعداد علامة الميزة الجديدة.

  1. في اللوحة اليمنى من وحدة تحكّم Firebase، ابحث عن قسم التفاعل، ثم انقر على الإعداد عن بُعد.
  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

5- إضافة ميزة مراقبة وقت تحميل البيانات

يحمّل تطبيقك بعض البيانات مسبقًا قبل عرض MainActivity ويعرض شاشة بداية لإخفاء هذه العملية. لا تريد أن ينتظر المستخدمون طويلاً على هذه الشاشة، لذا من المفيد عادةً مراقبة مدة عرض شاشة البداية.

توفّر خدمة "مراقبة أداء Firebase" طريقة لإجراء ذلك. يمكنك تسجيل عمليات تتبُّع الرموز المخصّصة لمراقبة أداء رموز معيّنة في تطبيقك، مثل وقت تحميل البيانات ووقت معالجة الميزة الجديدة.

لتتبُّع مدة عرض شاشة البداية، عليك إضافة عملية تتبُّع رمز مخصّص إلى 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أعِد تشغيل التطبيق في "استوديو Android". من المفترض أن تظهر لك رسالة تسجيل تتضمّن Logging trace metric: splash_screen_trace، متبوعة بمدة التتبُّع. لن تظهر لك رسالة سجلّ بشأن splash_seasonal_image_processing لأنّك لم تفعّل الميزة الجديدة بعد.

6. إضافة سمة مخصّصة إلى التتبُّع

بالنسبة إلى عمليات تتبُّع الرموز المخصّصة، تسجّل خدمة "مراقبة الأداء" تلقائيًا السمات التلقائية (البيانات الوصفية الشائعة، مثل إصدار التطبيق والبلد والجهاز وما إلى ذلك) حتى تتمكّن من فلترة البيانات لعملية التتبُّع في وحدة تحكّم Firebase. يمكنك أيضًا إضافة سمات مخصّصة وتتبُّعها.

في تطبيقك، أضفت للتوّ عمليتَي تتبُّع رمز مخصّص لمراقبة مدة شاشة البداية ووقت معالجة الميزة الجديدة. من العوامل التي قد تؤثر في هذه المدد ما إذا كانت الصورة المعروضة هي الصورة التلقائية أو ما إذا كان يجب تنزيل الصورة من عنوان 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. أضِف السمة المخصّصة نفسها إلى splash_seasonal_image_processing بعد طلب startTrace("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)، عليك تشغيل التطبيق في "استوديو Android" مرة أخرى. ستظهر لك رسالة تسجيل تتضمّن Setting attribute 'seasonal_image_url_attribute' to 'unset' on trace 'splash_screen_trace'. لم يتم تفعيل مَعلمة "الإعداد عن بُعد" seasonalImageUrl بعد، ولهذا السبب قيمة السمة هي unset.

ستجمع حزمة تطوير البرامج (SDK) لأداة "مراقبة الأداء" بيانات التتبُّع وترسلها إلى Firebase. يمكنك الاطّلاع على البيانات في لوحة بيانات الأداء في وحدة تحكّم Firebase، وسنشرحها بالتفصيل في الخطوة التالية من الدرس العملي.

7. إعداد لوحة بيانات "مراقبة الأداء"

ضبط لوحة البيانات لتتبُّع الميزة

في وحدة تحكّم Firebase، اختَر المشروع الذي يتضمّن تطبيق Friendly Eats.

في اللوحة اليمنى، ابحث عن قسم الإصدار والمراقبة، ثم انقر على الأداء.

من المفترض أن تظهر لك لوحة بيانات الأداء مع نقاط البيانات الأولى في لوحة المقاييس. تجمع حزمة تطوير البرامج (SDK) الخاصة بميزة "مراقبة الأداء" بيانات الأداء من تطبيقك وتعرضها في غضون دقائق من جمعها.

f57e5450b70034c9.png

لوحة المقاييس هذه هي المكان الذي يمكنك فيه تتبُّع المقاييس الرئيسية لتطبيقك. يتضمّن العرض التلقائي مدة تتبُّع وقت بدء تشغيل تطبيقك، ولكن يمكنك إضافة المقاييس التي تهمّك أكثر. بما أنّك تتتبّع الميزة الجديدة التي أضفتها، يمكنك تخصيص لوحة البيانات لعرض مدة تتبُّع الرمز المخصّص splash_screen_trace.

  1. انقر على أحد مربّعات اختيار مقياس الفارغة.
  2. في نافذة الحوار، اختَر نوع التتبُّع عمليات التتبُّع المخصّصة واسم عملية التتبُّع splash_screen_trace.

1fb81f4dba3220e0.png

  1. انقر على اختيار مقياس، وسيظهر لك مدة splash_screen_trace المضافة إلى لوحة البيانات.

يمكنك اتّباع الخطوات نفسها لإضافة مقاييس أخرى تهمّك حتى تتمكّن من الاطّلاع بسرعة على كيفية تغيُّر أدائها بمرور الوقت وحتى مع الإصدارات المختلفة.

1d465c021e58da3b.png

لوحة المقاييس هي أداة فعّالة لتتبُّع أداء المقاييس الرئيسية التي يواجهها المستخدمون. في هذا الدرس العملي، لديك مجموعة صغيرة من البيانات في نطاق زمني ضيق، لذا ستستخدم طرق عرض أخرى في لوحة البيانات ستساعدك في فهم أداء طرح الميزة.

8. طرح الميزة

بعد الانتهاء من إعداد عملية المراقبة، يمكنك الآن طرح التغيير الذي أجريته على ميزة "الإعداد عن بُعد عبر Firebase" (seasonal_image_url) الذي أعددته سابقًا.

لتطبيق تغيير، عليك الرجوع إلى صفحة "الإعداد عن بُعد" في وحدة تحكّم Firebase لزيادة النسبة المئوية للمستخدمين في شرط الاستهداف. عادةً، يتم طرح الميزات الجديدة لنسبة صغيرة من المستخدمين وزيادتها فقط عندما تكون واثقًا من عدم وجود أي مشاكل فيها. في هذا الدرس العملي، أنت المستخدم الوحيد للتطبيق، لذا يمكنك تغيير النسبة المئوية إلى %100.

  1. انقر على علامة التبويب الشروط في أعلى الصفحة.
  2. انقر على شرط Seasonal image rollout الذي أضفته سابقًا.
  3. غيِّر النسبة المئوية إلى %100.
  4. انقر على حفظ الشرط.
  5. انقر على نشر التغييرات وأكِّد التغييرات.

70f993502b27e7a0.png

بعد ذلك، أعِد تشغيل التطبيق في المحاكي للاطّلاع على الميزة الجديدة. بعد شاشة البداية، من المفترض أن تظهر لك الشاشة الرئيسية الجديدة ذات الحالة الفارغة.

b0cc91b6e48fb842.png

9. التحقّق من التغييرات في الأداء

لنتعرّف الآن على أداء تحميل شاشة البداية باستخدام لوحة بيانات الأداء في وحدة تحكّم Firebase. في هذه الخطوة من الدرس العملي، ستستخدم أجزاءً مختلفة من لوحة البيانات لعرض بيانات الأداء.

  1. في علامة التبويب الرئيسية لوحة البيانات، انتقِل للأسفل إلى جدول عمليات التتبُّع، ثم انقر على علامة التبويب عمليات التتبُّع المخصّصة. في هذا الجدول، ستظهر عمليات تتبُّع الرموز المخصّصة التي أضفتها سابقًا بالإضافة إلى بعض عمليات التتبُّع الجاهزة.
  2. بعد تفعيل الميزة الجديدة، ابحث عن تتبُّع الرمز المخصّص splash_seasonal_image_processing الذي قاس الوقت المستغرَق في تنزيل الصورة ومعالجتها. من قيمة المدة في التتبُّع، يمكنك ملاحظة أنّ عملية التنزيل والمعالجة تستغرق وقتًا طويلاً.

439adc3ec71805b7.png

  1. بما أنّ لديك بيانات عن splash_seasonal_image_processing، يمكنك إضافة مدة عملية التتبُّع هذه إلى لوحة المقاييس في أعلى علامة التبويب لوحة البيانات.

كما في السابق، انقر على أحد مربّعات اختيار مقياس الفارغة. في نافذة الحوار، اختَر نوع التتبُّع عمليات التتبُّع المخصّصة واسم عملية التتبُّع splash_seasonal_image_processing. أخيرًا، انقر على اختيار مقياس لإضافة هذا المقياس إلى لوحة المقاييس.

7fb64d2340410576.png

  1. للتأكّد من الاختلافات، يمكنك إلقاء نظرة فاحصة على بيانات splash_screen_trace. انقر على بطاقة splash_screen_trace في لوحة المقاييس، ثم انقر على عرض تفاصيل المقياس.

b1c275c30679062a.png

  1. في صفحة التفاصيل، ستظهر لك قائمة بالسمات في أسفل يسار الصفحة، بما في ذلك السمة المخصّصة التي أنشأتها سابقًا. انقر على السمة المخصّصة seasonal_image_url_attribute لعرض مدة شاشة البداية لكل عنوان URL لصورة موسمية على اليسار:

8fa1a69019bb045e.png

  1. من المحتمل أن تكون قيم مدة شاشة البداية مختلفة قليلاً عن تلك الواردة في لقطة الشاشة أعلاه، ولكن من المفترض أن تكون المدة أطول عند تنزيل الصورة من عنوان URL مقارنةً باستخدام الصورة التلقائية (الممثّلة بالقيمة "unset").

في هذا الدرس العملي، قد يكون سبب هذه المدة الأطول واضحًا، ولكن في تطبيق حقيقي، قد لا يكون الأمر كذلك. ستأتي بيانات المدة التي تم جمعها من أجهزة مختلفة، وسيتم تشغيل التطبيق في ظروف مختلفة من اتصال الشبكة، وقد تكون هذه الظروف أسوأ من توقعاتك. لنتعرّف على كيفية التحقيق في هذه المشكلة إذا كان هذا الموقف حقيقيًا.

  1. انقر على الأداء في أعلى الصفحة للرجوع إلى علامة التبويب الرئيسية لوحة البيانات: 640b696b79d90103.png
  2. في جدول التتبُّع في أسفل الصفحة، انقر على علامة التبويب طلبات الشبكة. في هذا الجدول، ستظهر لك جميع طلبات الشبكة من تطبيقك المجمَّعة في أنماط عناوين URL، بما في ذلك نمط عنوان URL images.unsplash.com/**. إذا قارنت قيمة وقت الاستجابة هذا بإجمالي الوقت المستغرَق في تنزيل الصورة ومعالجتها (أي مدة عملية التتبُّع splash_seasonal_image_processing)، ستلاحظ أنّ جزءًا كبيرًا من الوقت يُستغرَق في تنزيل الصورة.

6f92ce0f23494507.png

نتائج الأداء

باستخدام "مراقبة أداء Firebase"، لاحظت التأثير التالي على المستخدمين النهائيين عند تفعيل الميزة الجديدة:

  1. ازداد الوقت الذي تم قضاؤه في SplashScreenActivity.
  2. كانت مدة splash_seasonal_image_processing كبيرة جدًا.
  3. حدث التأخير بسبب وقت الاستجابة لتنزيل الصورة ووقت المعالجة اللازم لها.

في الخطوة التالية، ستخفّف من التأثير في الأداء من خلال التراجع عن الميزة وتحديد كيفية تحسين تنفيذها.

10. العودة إلى الإصدار السابق من الميزة

لا يُنصح بزيادة وقت انتظار المستخدمين أثناء ظهور شاشة البداية. من المزايا الرئيسية لميزة "الإعداد عن بُعد" إمكانية إيقاف عملية الطرح مؤقتًا وإلغائها بدون الحاجة إلى إصدار نسخة أخرى للمستخدمين. يتيح لك ذلك التفاعل بسرعة مع المشاكل (مثل مشاكل الأداء التي اكتشفتها في الخطوة الأخيرة) وتقليل عدد المستخدمين غير الراضين.

كإجراء سريع لتخفيف المشكلة، عليك إعادة ضبط النسبة المئوية للطرح إلى 0 لكي يرى جميع المستخدمين الصورة التلقائية مرة أخرى:

  1. ارجع إلى صفحة الإعداد عن بُعد في وحدة تحكّم Firebase.
  2. انقر على الشروط في أعلى الصفحة.
  3. انقر على Seasonal image rollout الشرط الذي أضفته سابقًا.
  4. غيِّر النسبة المئوية إلى 0%.
  5. انقر على حفظ الشرط.
  6. انقر على نشر التغييرات وأكِّد التغييرات.

18c4f1cbac955a04.png

أعِد تشغيل التطبيق في "استوديو Android"، وستظهر لك الشاشة الرئيسية الأصلية التي لا تتضمّن أي بيانات:

d946cab0df319e50.png

11. حلّ مشاكل الأداء

لقد اكتشفت في وقت سابق من الدرس العملي أنّ تنزيل صورة لشاشة البداية كان يتسبّب في تباطؤ تطبيقك. وعند إلقاء نظرة فاحصة على الصورة التي تم تنزيلها، تبيّن لك أنّك تستخدم درجة الدقة الأصلية للصورة، والتي كانت تزيد عن 2 ميغابايت. أحد الحلول السريعة لمشكلة الأداء هو خفض الجودة إلى دقة أكثر ملاءمة حتى يستغرق تنزيل الصورة وقتًا أقل.

طرح قيمة "الإعداد عن بُعد" مرة أخرى

  1. ارجع إلى صفحة الإعداد عن بُعد في وحدة تحكّم Firebase.
  2. انقر على رمز تعديل للمَعلمة seasonal_image_url.
  3. عدِّل قيمة طرح الصور الموسمية إلى https://images.unsplash.com/photo-1552691021-7043334e0b51?w=640، ثم انقر على حفظ.

828dd1951a2ec4a4.png

  1. انقر على علامة التبويب الشروط في أعلى الصفحة.
  2. انقر على طرح الصور الموسمية، ثم أعِد ضبط النسبة المئوية إلى %100.
  3. انقر على حفظ الشرط.

1974fa3bb789f36c.png

  1. انقر على الزر نشر التغييرات.

12. اختبار الإصلاح وإعداد التنبيهات

تشغيل التطبيق على الجهاز

بعد ضبط قيمة الإعداد الجديدة على استخدام عنوان URL مختلف لتنزيل الصورة، شغِّل التطبيق مرة أخرى. في هذه المرة، من المفترض أن تلاحظ أنّ الوقت المستغرَق في شاشة البداية أقصر من ذي قبل.

b0cc91b6e48fb842.png

الاطّلاع على أداء التغييرات

ارجع إلى لوحة بيانات الأداء في وحدة تحكّم 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

13. تهانينا!

تهانينا! لقد فعّلت حزمة تطوير البرامج (SDK) لخدمة "مراقبة أداء Firebase" وجمعت عمليات تتبُّع لقياس أداء ميزة جديدة. لقد راقبت مقاييس الأداء الرئيسية لطرح ميزة جديدة وتفاعلت بسرعة عند اكتشاف مشكلة في الأداء. وقد أصبح كل ذلك ممكنًا بفضل إمكانية إجراء تغييرات على الإعدادات باستخدام "الإعداد عن بُعد" ومراقبة مشاكل الأداء في الوقت الفعلي.

المواضيع التي تناولناها

  • إضافة حزمة تطوير البرامج (SDK) الخاصة بخدمة "مراقبة الأداء في Firebase" إلى تطبيقك
  • إضافة عملية تتبُّع رمز مخصّص إلى الرمز لقياس ميزة معيّنة
  • إعداد مَعلمة وقيمة شرطية في ميزة "الإعداد عن بُعد" للتحكّم في ميزة جديدة أو طرحها
  • التعرّف على كيفية استخدام لوحة بيانات مراقبة الأداء لتحديد المشاكل أثناء طرح إصدار
  • إعداد تنبيهات الأداء لإعلامك عندما يتجاوز أداء تطبيقك الحدّ الذي تحدّده

مزيد من المعلومات