مقالات إرشادية

دليل مستويات رحلة الأداء

قراءة لمدة 9 دقائق
Alice Yuan
مهندسة علاقات المطوّرين، Android

دليل مستويات رحلة الأداء

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

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

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


استكشِف المستوى الذي يناسبك أكثر:

المستوى 1:  استخدام ميزة مراقبة الأداء في الحقل التي توفّرها Play Console

ننصحك أولاً بالاستفادة من "مؤشرات Android الحيوية" ضِمن Play Console لعرض بيانات رصد الأداء في الحقل التي يتم جمعها تلقائيًا، ما يمنحك إحصاءات عن تطبيقك بأقل جهد ممكن.

"مؤشرات Android الحيوية" هي مبادرة من Google لجمع بيانات الحقل هذه وعرضها تلقائيًا.

في ما يلي شرح لكيفية عرض هذه البيانات:

  1. جمع البيانات: عندما يوافق المستخدم على جمع البيانات، يسجّل جهاز Android تلقائيًا أحداث الأداء والاستقرار الرئيسية من جميع التطبيقات، بما في ذلك تطبيقك.
  2. تجميع البيانات: يجمع Google Play هذه البيانات ويخفي هويتها من مستخدمي تطبيقك.
  3. عرض الإحصاءات: يتم عرض البيانات لك في لوحة بيانات "مؤشرات Android الحيوية" ضِمن Google Play Console.

تتتبّع لوحة بيانات "مؤشرات Android الحيوية" العديد من المقاييس، ولكن يتم تصنيف بعضها على أنّها مؤشرات الأداء الأساسية. وهي المقاييس الأكثر أهمية لأنّها يمكن أن تؤثر في مستوى ظهور تطبيقك وترتيبه على Google Play Store.

مؤشرات الأداء الأساسية

مقاييس الجودة الفنية الأساسية في GOOGLE PLAY

لتحقيق أقصى قدر من الظهور على Google Play، يجب أن يكون تطبيقك أقل من الحدود الدنيا للأداء السيئ لهذه المقاييس.

نسبة الأعطال التي لاحظها المستخدمونالنسبة المئوية للمستخدمين النشطين يوميًا الذين واجهوا عطلاً واحدًا على الأقل من المرجّح أن يكونوا قد لاحظوا حدوثه
نسبة أخطاء ANR التي لاحظها المستخدمونالنسبة المئوية للمستخدمين النشطين يوميًا الذين واجهوا خطأ ANR واحدًا على الأقل من المرجّح أن يكونوا قد لاحظوا حدوثه
استخدام البطارية بشكل زائدالنسبة المئوية لفترات عمل خلفية شاشة الساعة التي تتجاوز فيها نسبة استخدام البطارية ‎4.44% في الساعة
جديد: عمليات قفل التنشيط الجزئي الزائدة عن الحدالنسبة المئوية لجلسات المستخدمين التي يتجاوز فيها استخدام عمليات قفل التنشيط التراكمية غير المستثناة ساعتين

تشمل مؤشرات الأداء الأساسية نسبة الأعطال التي لاحظها المستخدمون، ونسبة أخطاء ANR، والاستخدام الزائد للبطارية، والمقياس الذي تم تقديمه حديثًا بشأن عمليات قفل التنشيط الجزئي الزائدة عن الحد.

نسبة أخطاء ANR التي لاحظها المستخدمون

يمكنك استخدام لوحة بيانات أخطاء ANR في "مؤشرات Android الحيوية" للاطّلاع على تتبُّع تسلسل استدعاء الدوال للمشاكل التي تحدث في الحقل والحصول على إحصاءات واقتراحات حول كيفية حلّ المشكلة. 

crashesAnrs.png

يمكنك الاطّلاع على تفاصيل خطأ ANR معيّن حدث، لعرض تتبُّع تسلسل استدعاء الدوال البرمجية بالإضافة إلى إحصاءات حول الأسباب المحتملة للمشكلة.

insights.png

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

نسبة الأعطال التي لاحظها المستخدمون

استخدِم لوحة بيانات الأعطال في "مؤشرات Android الحيوية" لتصحيح أخطاء الأعطال بشكلٍ إضافي وعرض نموذج من عمليات تتبُّع تسلسل استدعاء الدوال التي تحدث ضِمن تطبيقك. 

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

استخدام البطارية بشكل زائد

لتقليل فترات عمل خلفية شاشة الساعة التي تستخدم البطارية بشكل زائد على Wear OS، اطّلِع على دليل Wear لمعرفة كيفية تحسين البطارية والحفاظ عليها

[جديد] عمليات قفل التنشيط الجزئي الزائدة عن الحد

 

أعلنّا مؤخرًا أنّه قد يتم اتخاذ إجراءات إضافية بشأن التطبيقات التي تتجاوز الحد الأدنى لعمليات قفل التنشيط الجزئي الزائدة عن الحد، وذلك بدءًا من 1 مارس 2026

بالنسبة إلى الأجهزة الجوّالة، ينطبق مقياس "مؤشرات Android الحيوية" على عمليات قفل التنشيط غير المستثناة التي يتم الحصول عليها أثناء إيقاف الشاشة وتشغيل التطبيق في الخلفية أو تشغيل خدمة تعمل في المقدّمة. تعتبر "مؤشرات Android الحيوية" استخدام عمليات قفل التنشيط الجزئي زائدًا عن الحد إذا تم الاحتفاظ بعمليات قفل التنشيط لمدة ساعتين على الأقل خلال فترة 24 ساعة، ويؤثر ذلك في أكثر من% 5 من جلسات تطبيقك، وذلك على مدار 28 يومًا.

لتصحيح أخطاء مشاكل عمليات قفل التنشيط الزائدة عن الحد وحلّها، اطّلِع على منشور المدونة الفني.

ننصحك بالرجوع إلى مستندات مؤشرات Android الحيوية ومواصلة رحلتك للاستفادة بشكلٍ أفضل من "مؤشرات Android الحيوية".

المستوى 2: اتّباع بنود الإجراءات في "نقاط أداء التطبيق"

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

"نقاط أداء تطبيقات Android" هي إطار عمل موحّد لقياس الأداء الفني لتطبيقك. تمنحك هذه النقاط درجة تتراوح بين 0 و100، حيث يشير الرقم المنخفض إلى وجود مجال أكبر للتحسين.

لتحقيق مكاسب سهلة، يجب أن تبدأ أولاً بـ نقاط الأداء الثابتة. وغالبًا ما تكون هذه النقاط عبارة عن تغييرات في الإعدادات أو تحديثات للأدوات توفّر تحسينات كبيرة في الأداء.

الخطوة 1: إجراء التقييم الثابت

يقيّم التقييم الثابت إعدادات مشروعك واعتماد الأدوات. وغالبًا ما تكون هذه أسرع الطرق لتحسين الأداء.

انتقِل إلى قسم "النقاط الثابتة" في صفحة لوحة النتائج واتّبِع الخطوات التالية:

  1. تقييم إصدار المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP)
  2. اعتماد ميزة تقليص الرموز البرمجية في R8 بشكلٍ تدريجي أو استخدام R8 في الوضع الكامل لتقليص رموز التطبيق وتحسينها
  3. اعتماد الملفات الشخصية للمرجع التي تحسّن سرعة تنفيذ الرموز البرمجية من عملية التشغيل الأولى، ما يوفّر تحسينات في الأداء لكل عملية تثبيت جديدة للتطبيق وكل تحديث له
  4. اعتماد الملفات الشخصية لبدء التشغيل لتحسين تنسيق Dex يستخدم نظام الإصدار "الملفات الشخصية لبدء التشغيل" لزيادة تحسين الفئات والطرق التي تحتوي عليها من خلال تحسين تنسيق الرموز البرمجية في ملفات DEX الخاصة بحزمة APK.
  5. الترقية إلى أحدث إصدار من Jetpack Compose

الخطوة 2: إجراء التقييم الديناميكي

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

انتقِل إلى قسم "النقاط الديناميكية" في صفحة لوحة النتائج واتّبِع الخطوات التالية:

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

بعد إكمال هذه الخطوات، ستتلقّى درجة تتراوح بين 1 و100 للنقاط الثابتة والديناميكية، ما يمنحك فهمًا لأداء تطبيقك والمواضع التي يجب التركيز عليها.

المستوى 3: الاستفادة من أُطر عمل اختبار الأداء المحلية

بعد البدء في تقييم الأداء الديناميكي، قد تجد أنّ قياس الأداء يدويًا أمر ممل جدًا. ننصحك بتشغيل اختبار الأداء تلقائيًا باستخدام أُطر عمل اختبار الأداء، مثل Macrobenchmarks وUiAutomator.

‫Macrobenchmark 💚 UiAutomator

يمكنك اعتبار Macrobenchmark وUiAutomator أداتَين تعملان معًا: Macrobenchmark هي أداة القياس. وهي تشبه ساعة التوقيت وعداد عدد اللقطات في الثانية الذي يعمل خارج تطبيقك. وهي مسؤولة عن بدء تشغيل تطبيقك وتسجيل المقاييس (مثل وقت بدء التشغيل أو اللقطات التي تم إسقاطها) وإيقاف التطبيق. أما UiAutomator، فهي المستخدم الآلي. تتيح لك المكتبة كتابة رمز برمجية للتفاعل مع شاشة الجهاز. ويمكنها العثور على رمز والنقر على زر والتمرير في قائمة وغير ذلك.

كيفية كتابة اختبار

عند كتابة اختبار، يمكنك تضمين رمز UiAutomator البرمجية ضِمن كتلة Macrobenchmark.

  1. تحديد الاختبار: استخدِم @MacrobenchmarkRule
  2. بدء القياس: استخدِم benchmarkRule.measureRepeated.
  3. تشغيل واجهة المستخدم: ضِمن هذه الكتلة، استخدِم رمز UiAutomator البرمجية لتشغيل تطبيقك والعثور على عناصر واجهة المستخدم والتفاعل معها.

إليك مثال على مقتطف رمز برمجية لاختبار قائمة Compose بحثًا عن مشاكل التقطّع أثناء التمرير.

benchmarkRule.measureRepeated(

    // ...

    metrics = listOf(

        FrameTimingMetric(),

    ),

    startupMode = StartupMode.COLD,

    iterations = 10,

) {

    // 1. Launch the app's main activity

    startApp()

    // 2. Find the list using its resource ID and scroll down

    onElement { viewIdResourceName == "$packageName.my_list" }

        .fling(Direction.DOWN)

}

4. مراجعة النتائج: يقدّم لك كل اختبار معلومات تم قياسها بدقة لمنحك أفضل البيانات عن أداء تطبيقك.

timeToInitialDisplayMs  min  1894.4,   median 2847.4,   max  3355.6


frameOverrunMs          P50 -3.2,  P90  6.2, P95  10.4, P99  119.5

حالات الاستخدام الشائعة

توفّر Macrobenchmark عدة مقاييس أساسية جاهزة للاستخدام. تتيح لك StartupTimingMetric قياس وقت بدء تشغيل التطبيق بدقة. تتيح لك FrameTimingMetric فهم أداء عرض التطبيق أثناء الاختبار.

لدينا دليل مفصّل وكامل حول استخدام Macrobenchmarks وUiAutomator بالإضافة إلى نماذج الرموز البرمجية لمساعدتك في مواصلة التعلّم.

المستوى 4: استخدام أدوات تحليل عمليات التتبُّع، مثل Perfetto 

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

اطّلِع على قائمة تشغيل تصحيح أخطاء الأداء على YouTube للحصول على تعليمات فيديو حول تصحيح أخطاء الأداء باستخدام عمليات تتبُّع النظام وأداة استوديو Android Profiler وPerfetto.

كيفية استخدام Perfetto لتصحيح أخطاء الأداء

إنّ سير العمل العام لتصحيح أخطاء الأداء باستخدام أدوات تحليل عمليات التتبُّع هو تسجيل عملية التتبُّع وتحميلها وتحليلها. 

الخطوة 1: تسجيل عملية تتبُّع

يمكنك تسجيل عملية تتبُّع للنظام باستخدام عدة طرق: 

الخطوة 2: تحميل عملية التتبُّع

بعد الحصول على ملف عملية التتبُّع، عليك تحميله في أداة التحليل.

  1. افتح Chrome وانتقِل إلى ui.perfetto.dev.
  2. اسحب ملف .perfetto-trace (أو .pftrace) وأفلِته مباشرةً في نافذة المتصفّح.
  3. ستعالج واجهة المستخدم الملف وتعرض المخطط الزمني.

الخطوة 3: تحليل عملية التتبُّع

يمكنك استخدام واجهة مستخدم Perfetto أو أداة محلّل استوديو Android للتحقيق في مشكلة في الأداء. اطّلِع على هذه الحلقة من سلسلة MAD Skills حول الأداء، حيث تناقش مهندسة الأداء Carmen Jackson أداة Perfetto traceviewer.

سيناريوهات فحص عمليات تتبُّع النظام باستخدام Perfetto

Perfetto هي أداة متخصّصة ويمكنها تقديم معلومات عن كل ما حدث على جهاز Android أثناء تسجيل عملية التتبُّع. ويكون ذلك مفيدًا بشكلٍ خاص عندما لا يمكنك تحديد السبب الأساسي للتباطؤ باستخدام السجلّات العادية أو أدوات إنشاء الملفات الشخصية الأساسية.

تصحيح أخطاء التقطّع (اللقطات التي تم إسقاطها)

إذا كان تطبيقك يتلعثم أثناء التمرير، يمكن أن يعرض لك Perfetto السبب الدقيق لعدم استيفاء لقطة معيّنة للموعد النهائي.

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

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

تحليل بطء بدء تشغيل التطبيق

إنّ بدء التشغيل عملية معقّدة تتضمّن تهيئة النظام وتفرّع العمليات وتحميل الموارد. تعرض Perfetto هذا المخطط الزمني بدقة.

يمكنك معرفة ما إذا كنت تنتظر طلبات Binder (التواصل بين العمليات). إذا كانت الدالة onCreate تنتظر لفترة طويلة ردًا من PackageManager في النظام، ستعرض Perfetto هذه الحالة المحظورة بوضوح. 

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

التحقيق في استنزاف البطارية واستخدام وحدة المعالجة المركزية

بما أنّ Perfetto يرى النظام بأكمله، فهو مثالي للعثور على حالات استنزاف الطاقة غير المرئية.

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

المستوى 5: إنشاء إطار عمل خاص بك لتتبُّع الأداء

المستوى الأخير مخصّص للتطبيقات التي لديها فرق لديها الموارد اللازمة للحفاظ على إطار عمل لتتبُّع الأداء. 

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

باستخدام ApplicationStartInfo وProfilingManager وApplicationExitInfo، يمكنك إنشاء نظام قياس عن بُعد قوي يقدّم تقارير عن كيفية بدء تشغيل تطبيقك، ومعلومات تفصيلية عن الإجراءات التي اتّخذها أثناء تشغيله، وسبب إيقافه.

‫ApplicationStartInfo: تتبُّع كيفية بدء تشغيل التطبيق

توفر ApplicationStartInfo، المتاحة بدءًا من Android 15 (المستوى 35 لواجهة برمجة التطبيقات)، مقاييس تفصيلية عن بدء تشغيل التطبيق في الحقل. تشمل البيانات ما إذا كان بدء التشغيل على البارد أو على الدافئ أو إعادة تشغيل سريع، ومدة مراحل بدء التشغيل المختلفة. 

يساعدك ذلك في تطوير مقياس أساسي لبدء التشغيل باستخدام بيانات الإنتاج لتحسين ما قد يصعب إعادة إنتاجه محليًا. يمكنك استخدام هذه المقاييس لإجراء اختبارات أ/ب لتحسين عملية بدء التشغيل.

الهدف هو تسجيل مقاييس الإطلاق بدقة بدون إعداد كل مرحلة تهيئة يدويًا.

يمكنك طلب هذه البيانات بشكلٍ غير فوري بعد فترة من بدء تشغيل التطبيق.

‫ProfilingManager: تسجيل سبب البطء

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

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

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

اطّلِع على مستنداتنا حول كيفية تسجيل ملف شخصي، واسترداد بيانات الملف الشخصي وتحليلها واستخدام أوامر تصحيح الأخطاء.

‫ApplicationExitInfo: تتبُّع سبب إيقاف التطبيق

ApplicationExitInfo (المستوى 30 لواجهة برمجة التطبيقات) تخبرك بسبب إيقاف عمليتك السابقة. ويكون ذلك ضروريًا للعثور على الأعطال الأصلية أو أخطاء ANR أو عمليات الإيقاف التي يجريها النظام بسبب الاستخدام الزائد للذاكرة (OOM). ستتمكّن أيضًا من الحصول على عملية تتبُّع تفصيلية لملف الدفن باستخدام واجهة برمجة التطبيقات getTraceInputStream.

الهدف من واجهة برمجة التطبيقات هو فهم مشاكل الاستقرار التي لا تؤدي إلى تشغيل أدوات الإبلاغ عن الأعطال العادية في Java (مثل Low Memory Kills).

يجب تشغيل واجهة برمجة التطبيقات هذه عند بدء تشغيل التطبيق في المرة التالية.

الخطوات التالية

إنّ تحسين أداء Android رحلة خطوة بخطوة. نحن متحمّسون لرؤية كيف سترفعون مستوى الأداء باستخدام هذه الأدوات.

ترقَّبوا حلقة "اسأل Android" غدًا

لقد قلّصتم حجم تطبيقكم باستخدام R8 وحسّنتم وقت التشغيل باستخدام التحسين المستند إلى الملفات الشخصية. وقياس أداء تطبيقكم.

انضمّوا إلينا غدًا في جلسة "اسأل Android" المباشرة. اطرحوا أسئلتكم الآن باستخدام الهاشتاغ ‎ #AskAndroid وسيجيب عنها الخبراء.

تأليف:

متابعة القراءة