تساهم "ملفات تعريف الأداء الأساسي" في تحسين سرعة تنفيذ الرموز البرمجية بنسبة% 30 تقريبًا من عملية التشغيل الأولى من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسارات الرموز البرمجية المضمّنة.
من خلال تضمين ملف Baseline Profile في تطبيق أو مكتبة، يمكن وقت تشغيل Android (ART) تحسين مسارات الرموز المحدّدة من خلال عملية الترجمة المسبقة (AOT)، ما يؤدي إلى تحسين الأداء لكل مستخدم جديد ولكل تحديث للتطبيق. تتيح ميزة "التحسين المستند إلى الملف الشخصي" (PGO) للتطبيقات تحسين عملية بدء التشغيل وتقليل مشاكل التقطّع في التفاعل وتحسين الأداء العام لوقت التشغيل للمستخدمين منذ عملية الإطلاق الأولى.
تؤدي تحسينات الأداء هذه بشكل مباشر إلى تحسين مقاييس النشاط التجاري، مثل معدّل الاحتفاظ بالمستخدمين والمعاملات والتقييمات. يمكنك الاطّلاع على مزيد من المعلومات حول تأثير الأداء في مقاييس النشاط التجاري من خلال قصص Josh وLyft وTikTok وZomato.
مزايا "ملفات تعريف المرجع"
تعمل "ملفات تعريف خط الأساس" على تسهيل جميع تفاعلات المستخدمين، مثل بدء تشغيل التطبيق أو التنقّل بين الشاشات أو الانتقال سريعًا في المحتوى، وذلك منذ المرة الأولى التي يتم فيها تشغيل التطبيق. من خلال زيادة سرعة التطبيق واستجابته، يمكن أن تؤدي "ملفات Baseline" إلى زيادة عدد المستخدمين النشطين يوميًا وارتفاع متوسط معدل معاودة الزيارة.
تساعد "ملفات تعريف خط الأساس" في توجيه عملية التحسين إلى ما هو أبعد من بدء تشغيل التطبيق من خلال توفير تفاعلات شائعة للمستخدمين تعمل على تحسين وقت تشغيل التطبيق منذ الإطلاق الأول. لا تعتمد عملية الترجمة المسبقة الموجّهة على أجهزة المستخدمين، ويمكن إجراؤها مرة واحدة لكل إصدار على جهاز تطوير بدلاً من جهاز جوّال. من خلال إصدار التطبيقات مع Baseline Profile، تصبح تحسينات التطبيق متاحة بشكل أسرع بكثير من الاعتماد على ملفات تعريف السحابة الإلكترونية فقط.
في حال عدم استخدام "ملف Baseline"، يتم تجميع كل رموز التطبيق في الذاكرة في الوقت المناسب بعد تفسيرها، أو كتابتها في ملف odex في الخلفية عندما يكون الجهاز غير نشط. بعد تثبيت تطبيق أو تحديثه، سيواجه المستخدمون تجربة غير مثالية
منذ المرة الأولى التي يشغّل فيها التطبيق إلى أن يتم تحسين مسارات الرموز البرمجية الجديدة.
تقيس العديد من التطبيقات تحسُّنًا في الأداء بنسبة% 30 تقريبًا بعد التحسين.
الملفات الشخصية لبدء التشغيل
تشبه ملفات بدء التشغيل ملفات Baseline Profile، ولكن الفرق هو أنّها تُستخدَم في وقت الترجمة البرمجية بدلاً من استخدامها في التحسين على الجهاز. يتم استخدام ملف بدء التشغيل لتحسين تنسيق ملف DEX من أجل تقليل أوقات بدء التشغيل.
يتم وضع الرمز المحدّد في ملف بدء التشغيل في ملف classes.dex الأساسي، ويتم وضع الرموز الأخرى في ملفات DEX منفصلة. يؤدي ذلك إلى تحسين أوقات بدء التشغيل
من خلال تقليل عدد أخطاء الصفحات أثناء بدء تشغيل التطبيق. لمزيد من المعلومات حول كيف يمكن أن تؤدي ملفات تعريف بدء التشغيل وعمليات تحسين تنسيق DEX إلى تحسين أوقات بدء تشغيل التطبيق، اطّلِع على مقالة عمليات تحسين تنسيق DEX وملفات تعريف بدء التشغيل.
البدء
لبدء تحسين الأداء في تطبيقك الحالي، اطّلِع على إنشاء ملفات تعريف أساسية.
إنشاء الملف الشخصي مقابل الإصدارات
من المهم فهم الفرق في إعدادات الإصدار المطلوبة عند إنشاء ملفات خط الأساس وملفات بدء التشغيل (مثل baseline-prof.txt وstartup-prof.txt) مقارنةً بما هو مطلوب عند إنشاء حزمة APK النهائية للإصدار التي تستخدم هذه الملفات.
عند إنشاء ملفات شخصية (مثل benchmark):
للتأكّد من أنّ قواعد الملف الشخصي التي تم إنشاؤها تتطابق بدقة مع تواقيع الطرق في الرمز، عليك إيقاف التشويش والتحسين (R8) لمتغير الإصدار المستخدَم في إنشاء الملف الشخصي. يجب أن تختلف هذه الصيغة عن صيغة إصدارك العلني التي تم تفعيل ميزتَي التشويش والتحسين فيها. يمكنك إجراء ذلك من خلال ضبط isMinifyEnabled = false لمتغير الإصدار الخاص بإنشاء الملف الشخصي. إذا كنت لا تستخدم المكوّن الإضافي Baseline Profile Gradle، عليك أيضًا التأكّد من تطبيق -dontobfuscate و-dontoptimize. يتولّى
مكوّن Baseline Profile Gradle الإضافي
إدارة عملية الإعداد هذه تلقائيًا.
عند إنشاء حِزمة APK للإصدار النهائي، اتّبِع الخطوات التالية:
يجب أن تتضمّن بنية الإصدار دائمًا isMinifyEnabled = true للاستفادة من التمويه وإزالة البيانات غير الضرورية والتحسين. تعيد أداة R8 تلقائيًا كتابة القواعد من ملفات البيانات غير المشوّشة لتتطابق مع الرموز المشوّشة والمحسّنة في حزمة APK للإصدار. لكي يكون تحسين تنسيق DEX (الذي يتم استخدامه من خلال ملفات تعريف بدء التشغيل) فعّالاً، يجب أن يكون تطبيق الإصدار محجوبًا ويستخدم R8 مع تفعيل جميع التحسينات.
الحدّ الأدنى الذي يُنصح به للإصدارات الثابتة
توفر سلسلة التبعية إصدارات ثابتة وتطويرية. لإنشاء ملف تعريف أساسي وتثبيته، استخدِم الإصدارات المتوافقة التالية أو الإصدارات الأحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android ومكتبة Macrobenchmark وأداة Profile Installer. هذه التبعيات مطلوبة في أوقات مختلفة وتعمل معًا كسلسلة أدوات لتفعيل ملف Baseline Profile الأمثل.
- المكوّن الإضافي لنظام Gradle المتوافق مع Android:
com.android.tools.build:8.0.0 - مكتبة Macrobenchmark:
androidx.benchmark:benchmark-macro-junit4:1.4.1 - أداة تثبيت الملف الشخصي:
androidx.profileinstaller:profileinstaller:1.4.1
ننصحك باستخدام أحدث إصدار من "مكوّن Android Gradle الإضافي" لإنشاء ملفات Baseline Profiles وإدارتها. في ما يلي الوظائف الرئيسية التي تتوفّر مع الإصدارات المختلفة من "المكوّن الإضافي لنظام Gradle المتوافق مع Android":
| إصدار AGP | الميزات |
|---|---|
| 8.4 | تثبّت عمليات تثبيت التطبيق المحلية للإصدارات غير القابلة لتصحيح الأخطاء باستخدام أداة سطر الأوامر Gradle Wrapper أو "استوديو Android" حِزم Baseline Profiles، وبالتالي يتطابق أداء إصدارك المحلي مع إصدار الإنتاج بشكل أكبر. لا يؤثّر هذا التعديل في أداء "ملفات Baseline" في بيئة الإنتاج. |
| 8.3 |
|
| 8.2 |
|
| من نظام التشغيل Android | الحد الأدنى للإصدار المقترَح: استخدِم المكوّن الإضافي Baseline
Profile Gradle لإنشاء "ملفات Baseline" باستخدام مهمة
Gradle واحدة.
|
| 7.4 |
الحد الأدنى للإصدار المتوافق: يمكن للتطبيقات استخدام "ملفات Baseline"
من المكتبات، وتوفير "ملف Baseline" خاص بها في
ملف src/main/baseline-prof.txt.
|
مثال على إنشاء الملفات الشخصية
في ما يلي مثال على فئة لإنشاء "ملف تعريف أساسي" لبدء تشغيل التطبيق، بالإضافة إلى العديد من أحداث التنقّل والتمرير باستخدام مكتبة Macrobenchmark المقترَحة:
class BaselineProfileGenerator {
@get:Rule
val baselineProfileRule = BaselineProfileRule()
@Test
fun appStartupAndUserJourneys() {
baselineProfileRule.collect(packageName = PACKAGE_NAME) {
uiAutomator {
// App startup journey.
startApp(PACKAGE_NAME)
// Find and click elements using the new DSL
onElement { textAsString() == "COMPOSE LAZYLIST" }.click()
onElement { viewIdResourceName == "myLazyColumn" }.also {
it.fling(Direction.DOWN)
it.fling(Direction.UP)
}
pressBack()
}
}
}
}
لمزيد من المعلومات حول استخدام مكتبة UI Automator لأتمتة رحلات المستخدمين، يُرجى الاطّلاع على كتابة اختبارات مبرمَجة باستخدام UI Automator.
يمكنك الاطّلاع على هذا الرمز في سياقه الكامل والمزيد من التفاصيل كجزء من عيّنات الأداء على GitHub.
مضمون الفيديو
عند استخدام "ملفات تعريف خط الأساس" في تطبيق، يمكنك تضمين رمز بدء تشغيل التطبيق والتفاعلات الشائعة للمستخدمين، مثل التنقّل بين الشاشات أو الانتقال لأعلى الصفحة أو لأسفلها. يمكنك أيضًا جمع عمليات كاملة، مثل التسجيل أو تسجيل الدخول أو الدفع. يمكن أن تستفيد أي رحلات مستخدمين تعتبرها مهمة من "ملفات تعريف الخط الأساس" من خلال تحسين أداء وقت التشغيل.
إذا كنت تجرّب طرقًا مختلفة لتحسين الأداء، ننصحك بتضمين "ملفات تعريف خط الأساس" في كلتا مجموعتَي التجربة. من خلال إجراء ذلك، يمكنك تسهيل تفسير نتائجك من خلال التأكّد من أنّ جميع المستخدمين يشغّلون الرمز البرمجي المجمَّع بشكل متّسق.
يمكن للمكتبات توفير "ملفات تعريف الأداء الأساسي" الخاصة بها وشحنها مع الإصدارات لتحسين أداء التطبيق. على سبيل المثال، اطّلِع على قسم "استخدام ملف تعريف أساسي" في أداء Jetpack Compose.
طريقة عمل "ملفات Baseline"
أثناء تطوير تطبيقك أو مكتبتك، ننصحك بتحديد "ملفات تعريف أساسية" لتغطية تفاعلات المستخدمين الشائعة التي يكون فيها وقت العرض أو وقت الاستجابة مهمًا. إليك طريقة عملها:
يتم إنشاء قواعد الملف الشخصي القابلة للقراءة بواسطة الإنسان لتطبيقك وتجميعها في شكل ثنائي في التطبيق. ويمكنك العثور عليها في
assets/dexopt/baseline.prof. يمكنك بعد ذلك تحميل حِزمة AAB إلى Google Play كالمعتاد.يعالج Google Play الملف الشخصي ويرسله مباشرةً إلى المستخدمين مع حزمة APK. أثناء التثبيت، ينفّذ ART عملية تجميع مسبق (AOT) للطُرق الواردة في الملف الشخصي، ما يؤدي إلى تنفيذ هذه الطرق بشكل أسرع. إذا كان الملف الشخصي يحتوي على طرق مستخدَمة عند تشغيل التطبيق أو أثناء عرض اللقطات، قد يحصل المستخدم على أوقات تشغيل أسرع وتقليل في حدوث تشوّش.
يتعاون مسار العمل هذا مع تجميع "ملفات تعريف السحابة الإلكترونية" لتحسين الأداء استنادًا إلى الاستخدام الفعلي للتطبيق بمرور الوقت.
ملفات Cloud
توفّر "الملفات الشخصية المستندة إلى السحابة الإلكترونية" شكلاً إضافيًا من PGO، يتم تجميعه من خلال "متجر Google Play" وتوزيعه لتجميع وقت التثبيت، بالإضافة إلى "ملفات Baseline".
على الرغم من أنّ "ملفات تعريف السحابة الإلكترونية" تستند إلى تفاعلات المستخدمين الحقيقية مع التطبيق، إلا أنّ توزيعها يستغرق عدة ساعات أو أيام بعد إجراء تحديث، ما يحدّ من توفّرها. إلى أن يتم توزيع الملفات الشخصية بالكامل، سيكون أداء التطبيقات غير مثالي بالنسبة إلى مستخدمي التطبيقات الجديدة أو المعدَّلة. بالإضافة إلى ذلك، لا تتوافق "الملفات الشخصية على السحابة الإلكترونية" إلا مع أجهزة Android التي تعمل بالإصدار 9 (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث، ولا يمكن توسيع نطاقها بشكل جيد إلا للتطبيقات التي لديها قاعدة مستخدمين كبيرة بما يكفي.
سلوك التجميع في جميع إصدارات Android
تستخدم إصدارات منصة Android أساليب مختلفة لتجميع التطبيقات، ولكل منها مفاضلة مرتبطة بالأداء. تتفوّق "ملفات Baseline Profile" على طرق التجميع السابقة من خلال توفير ملف لجميع عمليات التثبيت.
| إصدار Android | طريقة التجميع | أسلوب التحسين |
|---|---|---|
| 5 إلى 6 (المستوى 21 إلى 23 من واجهة برمجة التطبيقات) | Full AOT | يتم تحسين التطبيق بأكمله أثناء التثبيت، ما يؤدي إلى طول مدة الانتظار لاستخدام التطبيق وزيادة استخدام ذاكرة الوصول العشوائي ومساحة التخزين على القرص وزيادة الوقت اللازم لتحميل الرمز من القرص، ما قد يؤدي إلى زيادة مدة بدء التشغيل البارد. |
| 7 إلى 8.1 (المستوى 24 إلى 27 من واجهة برمجة التطبيقات) | الترجمة المسبقة الكاملة (Baseline Profile) | يتم تثبيت "ملفات تعريف خط الأساس" من خلال
androidx.profileinstaller
في عملية التشغيل الأولى عندما يحدّد
وحدة تطبيق هذه
التبعية. يمكن أن يحسّن ART ذلك بشكل أكبر من خلال إضافة قواعد ملفات شخصية إضافية أثناء استخدام التطبيق، وتجميعها عندما يكون الجهاز غير نشط. يساعد ذلك في تحسين استخدام مساحة القرص وتقليل الوقت اللازم لتحميل الرمز من القرص، ما يؤدي إلى تقليل وقت انتظار التطبيق. |
| 9 (المستوى 28 لواجهة برمجة التطبيقات) والإصدارات الأحدث | الترجمة المسبقة الكاملة (الأساسية + ملف السحابة الإلكترونية) | يستخدم Play ملفات Baseline Profiles أثناء عمليات تثبيت التطبيقات لتحسين حِزم APK وملفات Cloud Profiles، إذا كانت متاحة. بعد التثبيت، يتم تحميل ملفات ART الشخصية إلى Play وتجميعها، ثم يتم توفيرها كملفات شخصية على السحابة الإلكترونية للمستخدمين الآخرين عند تثبيت التطبيق أو تحديثه. |
المشاكل المعروفة
في ما يلي المشاكل والحلول المحتملة، أو المشاكل التي يتم حاليًا تطوير حلول بديلة لها:
قد يتعذّر إنشاء Baseline Profile بسبب إعدادات الأذونات على بعض الأجهزة، بما في ذلك أجهزة OnePlus. لتجنُّب هذه المشكلة، أوقِف الخيار إيقاف مراقبة الأذونات في إعدادات خيارات المطوّرين.
لا تتوافق عملية إنشاء "ملف تعريف خط الأساس" مع أجهزة Firebase Test Lab، بما في ذلك أجهزة Test Lab التي تديرها Gradle (المشكلة رقم 285187547).
لتوفير "ملفات تعريف الأداء الأساسية" للمكتبات بنجاح، استخدِم الإصدار 1.2.3 من مكوّن Baseline Profile الإضافي في Gradle أو الإصدار 8.3 من "مكوّن Android الإضافي في Gradle" على الأقل (المشكلة رقم 313992099).
إذا أنشأت "ملفات تعريف خط الأساس" باستخدام الأمر
./gradlew app:generateBaselineProfile، سيتم أيضًا تشغيل مقاييس الأداء في وحدة الاختبار، وسيتم تجاهل النتائج. في حال حدوث ذلك، يمكنك إنشاء ملفات تعريف أساسية فقط من خلال تنفيذ الأمر مع-P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile. تم إصلاح هذه المشكلة في الإصدار 8.2 من "مكوّن Android الإضافي لبرنامج Gradle".لا يؤدي الأمر
./gradlew app:generateBaselineProfile، الذي يُستخدَم لإنشاء ملفات Baseline Profiles لجميع أنواع الإصدارات، إلا إلى إنشاء ملفات Baseline Profiles لنوع إصدار التطبيق. تم حلّ هذه المشكلة في الإصدار 8.1 من "مكوّن Android الإضافي في Gradle".قد لا تتيح قنوات توزيع التطبيقات غير التابعة لـ "متجر Google Play" استخدام Baseline Profiles عند التثبيت. لن تظهر مزايا التطبيقات المثبَّتة من خلال هذه القنوات للمستخدمين إلا بعد تشغيل dexopt في الخلفية، وهو ما يحدث غالبًا أثناء الليل.
لا تتيح ميزة مشاركة التطبيقات مع الفريق الداخلي على "متجر Play" استخدام "ملفات تعريف Baseline"، ولكن يتيحها مسار الاختبار الداخلي.
يمكن أن تتداخل تحسينات البطارية على بعض الأجهزة، مثل أجهزة Huawei، مع عملية تثبيت الملف الشخصي. للمساعدة في ضمان تثبيت ملفاتك الشخصية بشكل فعّال، أوقِف أي تحسينات للبطارية في أجهزة قياس الأداء.
مراجع إضافية
مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة.
- إنشاء ملفات تعريف أساسية {:#creating-profile-rules}
- إنشاء ملفات Baseline Profiles وقياسها بدون Macrobenchmark
- تحسينات على تنسيق DEX وملفات بدء التشغيل