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

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

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

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

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

لقد أنشأنا دليل مستويات الأداء خطوة بخطوة لمساعدة فريق تطوير التطبيقات على الأجهزة الجوّالة في أي مرحلة كان، سواء كنت مطوّرًا واحدًا لتطبيق واحد وتريد البدء في تحسين الأداء، أو كان لديك فريق كامل مخصّص لتحسين أداء 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.

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

مقاييس الجودة الفنية الأساسية في 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 Studio Profiler وPerfetto.

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

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

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

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

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

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

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

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

يمكنك استخدام واجهة مستخدم Perfetto أو استوديو Android Profiler للتحقيق في مشاكل الأداء. اطّلِع على هذه الحلقة من سلسلة 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 وسيجيب عنها الخبراء.

تأليف:

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