تساهم "ملفات Baseline Profile" في تحسين سرعة تطبيق الرموز البرمجية بنسبة% 30 تقريبًا من عملية التشغيل الأولى من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسارات الرموز البرمجية المضمّنة.
من خلال تضمين "الملف الشخصي للمرجع" في تطبيق أو مكتبة، يمكن لوقت تشغيل Android (ART) تحسين مسارات الرموز المحدّدة من خلال عملية الترجمة المسبقة (AOT)، ما يؤدي إلى تحسين الأداء لكل مستخدم جديد ولكل تحديث للتطبيق. تتيح هذه الميزة، أي التحسين المستند إلى الملف الشخصي (PGO)، للتطبيقات تحسين عملية بدء التشغيل وتقليل مشاكل عدم سلاسة التفاعل وتحسين أداء وقت التشغيل بشكل عام للمستخدمين منذ عملية الإطلاق الأولى.
تؤدي تحسينات الأداء هذه بشكل مباشر إلى تحسين مقاييس النشاط التجاري، مثل الحفاظ على المستخدمين والمعاملات والتقييمات. يمكنك الاطّلاع على مزيد من المعلومات حول تأثير الأداء في مقاييس النشاط التجاري من خلال قصص من Josh وLyft وTikTok وZomato.
مزايا "ملفات Baseline"
تتيح "ملفات تعريف خط الأساس" إجراء عملية تجميع مسبق للرمز البرمجي في تفاعلات المستخدمين المهمة، مثل بدء تشغيل التطبيق أو التنقّل بين الشاشات أو تمرير المحتوى، ما يجعل هذه التفاعلات أكثر سلاسة منذ أول مرة يتم فيها تشغيل التطبيق. من خلال زيادة سرعة التطبيق واستجابته، يمكن أن تؤدي "ملفات Baseline" إلى زيادة عدد المستخدمين النشطين يوميًا وارتفاع متوسط معدل معاودة الزيارة.
تساعد "ملفات Baseline Profiles" في توجيه عملية التحسين إلى ما هو أبعد من بدء تشغيل التطبيق من خلال توفير تفاعلات شائعة للمستخدمين تعمل على تحسين وقت تشغيل التطبيق منذ إطلاقه للمرة الأولى. لا تعتمد عملية الترجمة المسبقة الموجّهة على أجهزة المستخدمين، ويمكن إجراؤها مرة واحدة لكل إصدار على جهاز تطوير بدلاً من جهاز جوّال. من خلال إصدار التطبيقات باستخدام الملف الشخصي للمرجع، تصبح تحسينات التطبيق متاحة بشكل أسرع بكثير من الاعتماد على ملفات تعريف السحابة الإلكترونية وحدها.
في حال عدم استخدام "ملف تعريف أساسي"، يتم تجميع كل رموز التطبيق في الذاكرة في الوقت المناسب بعد تفسيرها، أو يتم كتابتها في ملف odex في الخلفية عندما يكون الجهاز غير نشط. بعد تثبيت تطبيق أو تحديثه، سيواجه المستخدمون تجربة غير مثالية
منذ المرة الأولى التي يشغّلون فيها التطبيق إلى أن يتم تحسين مسارات الرموز الجديدة.
تقيس العديد من التطبيقات تحسُّنًا في الأداء بنسبة% 30 تقريبًا بعد التحسين.
الملفات الشخصية للشركات الناشئة
تشبه ملفات تعريف بدء التشغيل ملفات Baseline Profiles، ولكن يتم استخدامها في وقت التجميع لتحسين تصميم DEX من أجل تقليل أوقات بدء التشغيل، بدلاً من تحسينها على الجهاز فقط. لمزيد من المعلومات حول الفرق بين ملفات تعريف بدء التشغيل و"ملفات المرجع"، يمكنك الاطّلاع على مقارنة "ملفات المرجع" و"ملفات تعريف بدء التشغيل". لمزيد من المعلومات حول تحسين تخطيط DEX، اطّلِع على تحسينات تخطيط DEX وملفات بدء التشغيل.
البدء
لبدء تحسين الأداء في تطبيقك الحالي، اطّلِع على إنشاء ملفات شخصية للمرجع.
مقارنة بين إنشاء الملفات الشخصية وإصدارات التطبيق
من المهم فهم الفرق في إعدادات الإصدار المطلوبة عند إنشاء ملفات "الملفات الشخصية للمرجع" و"ملفات تعريف بدء التشغيل" (على سبيل المثال، baseline-prof.txt وstartup-prof.txt) مقارنةً بما هو مطلوب عند إنشاء حزمة APK النهائية للإصدار التي تستخدم هذه الملفات الشخصية.
عند إنشاء ملفات شخصية (مثل benchmark):
عند تسجيل الملف الشخصي للمرجع باستخدام اختبار، يجب ألا يتم تشويش تطبيقك.
للتأكّد من أنّ قواعد الملف الشخصي التي تم إنشاؤها تتطابق بدقة مع تواقيع الطرق في الرمز، عليك إيقاف التشويش والتحسين (R8) لمتغير الإصدار المستخدَم في إنشاء الملف الشخصي. يجب أن تختلف هذه الصيغة عن صيغة إصدارك العلني التي تم تفعيل ميزتَي التشويش والتحسين فيها. يمكنك تحقيق ذلك من خلال ضبط isMinifyEnabled = false لتنويعة التصميم الخاصة بإنشاء الملف الشخصي. إذا كنت لا تستخدم المكوّن الإضافي Baseline Profile Gradle، عليك أيضًا التأكّد من تطبيق -dontobfuscate و-dontoptimize. يتولّى المكوّن الإضافي لنظام Gradle الخاص بملف Baseline Profile عملية ضبط الإعدادات هذه تلقائيًا.
يمكنك التأكّد من عدم تشويش تطبيقك أثناء إنشاء الملف الشخصي من خلال فتح ملف النص الذي تم إنشاؤه (على سبيل المثال، baseline-prof.txt) والتأكّد من أنّ أسماء الفئات والطرق غير مشوّشة.
عند إنشاء حِزمة APK للإصدار النهائي، اتّبِع الخطوات التالية:
عند إنشاء تطبيق الإصدار، يجب أن يتم تشويش تطبيقك. يجب أن تتضمّن بنية الإصدار isMinifyEnabled = true للاستفادة من إخفاء مفاتيح فك التشفير وإزالة البيانات غير الضرورية والتحسين. تعيد أداة R8 كتابة القواعد تلقائيًا من ملفات البيانات غير المشوَّشة لتتطابق مع الرموز المشوَّشة والمحسَّنة في حزمة APK للإصدار. يستفيد الإصدار من ملف النص غير المشوَّش من خلال تحويل القواعد بشكل صحيح.
إذا أردت تفعيل تحسين تخطيط DEX (الذي يتم استخدامه من خلال ملفات تعريف بدء التشغيل)، يجب أن يكون تطبيق الإصدار مشفّرًا ويستخدم R8 مع تفعيل جميع عمليات التحسين.
سير العمل المتقدّم (غير Gradle):
إذا كنت تستخدم سير عمل متقدّمًا غير Gradle (مثل Bazel أو Buck أو خطوط أنابيب مخصّصة لأتمتة الدمج المتواصل)، عليك اتّباع المبادئ نفسها. يجب ألا يكون تطبيقك مشوَّشًا أو محسَّنًا عند تسجيل الملف الشخصي. ومع ذلك، عند إنشاء تطبيق الإصدار، يجب تشويشه. تعالج أداة R8 ملف قواعد النص غير المشوَّش وتحوّل القواعد بشكل صحيح لتطبيقها على إصدار التطبيق المشوَّش.
الحدّ الأدنى للإصدارات الثابتة المقترَحة
توفر سلسلة التبعية إصدارات ثابتة وتجريبية. لإنشاء الملف الشخصي للمرجع وتثبيته، استخدِم الإصدارات المتوافقة التالية أو الإصدارات الأحدث من المكوّن الإضافي لنظام Gradle المتوافق مع Android ومكتبة Macrobenchmark وProfile Installer. هذه الاعتماديات مطلوبة في أوقات مختلفة وتعمل معًا كسلسلة أدوات لتفعيل "الملف الشخصي للمرجع" الأمثل.
- المكوّن الإضافي لنظام 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):
| إصدار AGP | الميزات |
|---|---|
| 9.1 |
إتاحة استخدام دليل مجموعة رموز المصدر الكاملة (وحدات المكتبة):
بالإضافة إلى الأدلة التي تتوافق مع صيغ التطبيق، يمكنك التعريف
ملفات مصدر متعددة لـ الملف الشخصي للمرجع باستخدام اسم عشوائي،
مثل src/free/generated/baselineProfiles/baseline-prof1.txt،
لوحدات المكتبة ووحدات التطبيق.
|
| 8.4 | تثبّت عمليات تثبيت التطبيقات المحلية للإصدارات غير القابلة للتصحيح باستخدام أداة سطر الأوامر Gradle wrapper أو "استوديو Android" ملفات Baseline Profiles، وبالتالي يتطابق أداء الإصدار المحلي مع الإصدار العلني بشكل أكبر. لا يؤثّر هذا التعديل في أداء "ملفات المرجع" في الإصدار العلني. |
| 8.3 |
|
| 8.2 |
|
| من نظام التشغيل Android | الحد الأدنى للإصدار الذي ننصح به: استخدِم المكوّن الإضافي Baseline Profile Gradle لإنشاء "ملفات مرجعية" باستخدام مهمة Gradle واحدة.
|
| 7.4 |
الحد الأدنى للإصدار المتوافق: يمكن للتطبيقات استخدام الملفات الشخصية للمرجع
من المكتبات، وتوفير الملف الشخصي للمرجع الخاص بها في
ملف src/main/baseline-prof.txt.
|
إعدادات مصدر الملف الشخصي التي تراعي صيغ المنتجات
باستخدام الإصدار 8.0 من "مكوّن إضافي لنظام Gradle المتوافق مع Android" للتطبيقات والإصدار 8.3 من "مكوّن إضافي لنظام Gradle المتوافق مع Android" للمكتبات، يمكنك وضع قواعد "الملف الشخصي للمرجع" في دليل "مجموعة رموز المصدر" مخصّص، ما يتيح لك تجاوز القيود المفروضة على مسار واحد وثابت (على سبيل المثال، src/main/baseline-prof.txt) واستخدام ملفات متعددة.
يسهّل ذلك توفير دعم قوي لخيارات التصميم، ما يتيح لك تحديد ملفات Baseline Profile مميّزة ومخصّصة لأنواع ومذاقات إصدارات معيّنة (على سبيل المثال، باستخدام أدلة مثل src/variant/baselineProfiles/)، ما يضمن تطبيق قواعد تحسين الأداء بدقة على كل تطبيق أو مكتبة ثنائية فريدة.
مثال على إنشاء ملف شخصي
في ما يلي مثال على فئة لإنشاء "الملف الشخصي للمرجع" لبدء تشغيل التطبيق، بالإضافة إلى العديد من أحداث التنقّل والتمرير باستخدام مكتبة 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. يمكنك بعد ذلك تحميل مجموعة حزمات تطبيق Android (AAB) إلى Google Play كالمعتاد.يعالج Google Play الملف الشخصي ويرسله مباشرةً إلى المستخدمين مع حزمة APK. أثناء التثبيت، ينفّذ ART عملية تجميع مسبق (AOT) للطُرق الواردة في الملف الشخصي، ما يؤدي إلى تنفيذ هذه الطرق بشكل أسرع. إذا كان الملف الشخصي يحتوي على طرق مستخدَمة عند إطلاق التطبيق أو أثناء عرض الإطارات، قد يحصل المستخدم على أوقات تشغيل أسرع وتقليل في إيقاف مؤقت لعرض واجهة المستخدم.
يتعاون سير العمل هذا مع تجميع "ملفات تعريف السحابة الإلكترونية" لتحسين الأداء استنادًا إلى الاستخدام الفعلي للتطبيق بمرور الوقت.
المقارنة بين "ملفات تعريف بدء التشغيل" و"ملفات تعريف المرجع"
يمكنك استخدام مكوّن Baseline Profile Gradle الإضافي لتحديد ملفات الملف الشخصي للمرجع وإنتاجها.
تتكامل هذه الإضافة مع عملية الإنشاء، ويحوّل "مكوّن Android الإضافي في Gradle" قواعد الملفات الشخصية القابلة للقراءة هذه إلى تنسيق ثنائي، ويتم تجميعها في baseline.prof ضمن حزمة APK أو AAB، ويمكن لـ ART استخدامها بفعالية في عملية الترجمة على الجهاز، شرط أن يكون حجمها أقل من 1.5 ميغابايت.
عادةً ما يتم تسمية ملفات البيانات الشخصية التي يتم إنتاجها startup-prof.txt وbaseline-prof.txt. على الرغم من أنّ محتواها قد يبدو متشابهًا في بعض الأحيان، خاصةً إذا كنت تركّز بشكل أساسي على بدء التشغيل، إلا أنّها تخدم أغراضًا مختلفة وتؤثّر في الأداء في مراحل مختلفة:
الملف الشخصي للمرجع
يحتوي ملف "الملف الشخصي للمرجع" على مجموعة شاملة من القواعد التي يستخدمها وقت تشغيل Android (ART) لتجميع مسارات الرموز المستخدَمة بشكل متكرر مسبقًا، ما يؤدي إلى تحسين أداء التطبيق إلى ما هو أبعد من مجرد بدء التشغيل.
ملف Baseline Profile هو بشكل عام مجموعة فرعية من القواعد الواردة في Startup Profile. يتضمّن هذا الملف جميع القواعد المطلوبة لتحسين وقت بدء تشغيل التطبيق (التي يتم إنشاؤها من خلال مهمة baselineProfile Gradle)، بالإضافة إلى ملفات شخصية إضافية لرحلات المستخدمين المهمة الأخرى. على سبيل المثال، التنقّل بين الشاشات المختلفة والتمرير.
يتم إنشاء هذه القواعد الإضافية غير المتعلقة ببدء التشغيل بغض النظر عن قيمة حقل إعداد
includeInStartupProfile.
الملف التعريفي للشركة الناشئة
يحتوي ملف Startup Profile على قواعد محسّنة خصيصًا لمسار بدء تشغيل تطبيقك. أثناء التجميع، يحوّل D8 الرموز الثنائية لبرنامج Java إلى تنسيق DEX.
يستخدم R8 بعد ذلك هذا الملف للتأثير في تصميم ملفات DEX، مع التأكّد من وضع الرمز البرمجي المهم عند بدء التشغيل في ملف DEX الأساسي لتنفيذه بشكل أسرع. يجب بشكل عام ضبط includeInStartupProfile على true فقط في سيناريوهات الاختبار الضرورية للعرض الأوّلي للتطبيق. لمزيد من المعلومات، يُرجى الاطّلاع على إنشاء ملفات شخصية للشركات الناشئة.
ملفات Cloud
توفّر "الملفات الشخصية المستندة إلى السحابة الإلكترونية" شكلاً إضافيًا من PGO، يتم تجميعه من خلال "متجر Google Play" وتوزيعه لتجميع وقت التثبيت، وذلك بالإضافة إلى "ملفات Baseline".
مع أنّ "الملفات الشخصية على السحابة الإلكترونية" تستند إلى تفاعلات المستخدمين الحقيقية مع التطبيق، إلا أنّ توزيعها يستغرق عدة ساعات أو أيام بعد إجراء التحديث، ما يحدّ من مدى توفّرها. إلى أن يتم توزيع الملفات الشخصية بالكامل، سيكون أداء التطبيق غير مثالي لمستخدمي التطبيقات الجديدة أو المعدَّلة. بالإضافة إلى ذلك، لا تتوافق "الملفات الشخصية على السحابة الإلكترونية" إلا مع أجهزة Android التي تعمل بالإصدار 9 (مستوى واجهة برمجة التطبيقات 28) أو الإصدارات الأحدث، ولا يمكن توسيع نطاقها بشكل جيد إلا للتطبيقات التي لديها قاعدة مستخدمين كبيرة بما يكفي.
سلوك التجميع في إصدارات Android المختلفة
تستخدم إصدارات منصة Android أساليب مختلفة لتجميع التطبيقات، ولكل منها مفاضلة مرتبطة بالأداء. تتفوّق "ملفات Baseline Profiles" على طرق التجميع السابقة من خلال توفير ملف شخصي لجميع عمليات التثبيت.
| إصدار 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 وتجميعها ثم تقديمها كملفات شخصية على السحابة الإلكترونية للمستخدمين الآخرين عند تثبيت التطبيق أو تحديثه. |
المشاكل المعروفة
في ما يلي المشاكل والحلول المحتملة، أو المشاكل التي يتم حاليًا تطوير حلول بديلة لها:
قد يتعذّر إنشاء الملف الشخصي للمرجع بسبب إعدادات الأذونات على بعض الأجهزة، بما في ذلك أجهزة OnePlus. لتجنُّب هذه المشكلة، أوقِف الخيار إيقاف مراقبة الأذونات في إعدادات خيارات المطوّرين.
لتوفير الملفات الشخصية للمرجع للمكتبات بنجاح، استخدِم الإصدار 1.2.3 من مكوّن Baseline Profile الإضافي في Gradle أو الإصدار 8.3 من "مكوّن Android الإضافي في Gradle" على الأقل (المشكلة رقم 313992099).
إذا أنشأت "ملفات تعريف أساسية" باستخدام الأمر
./gradlew app:generateBaselineProfile، سيتم أيضًا تشغيل مقاييس الأداء في وحدة الاختبار، وسيتم تجاهل النتائج. في حال حدوث ذلك، يمكنك إنشاء ملفات Baseline Profiles فقط من خلال تنفيذ الأمر مع-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 في الخلفية، وهو ما يحدث غالبًا أثناء الليل.
لا تتيح ميزة "مشاركة التطبيقات مع الفريق الداخلي" على "متجر Google Play" استخدام "الملفات الشخصية للمرجع"، ولكن يتيحها مسار الاختبار الداخلي.
يمكن أن تتداخل تحسينات البطارية على بعض الأجهزة، مثل أجهزة Huawei، مع عملية تثبيت الملف الشخصي. للمساعدة في ضمان تثبيت ملفاتك الشخصية بفعالية، أوقِف أي إعدادات لتوفير البطارية في أجهزة قياس الأداء.
مراجع إضافية
مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة
- إنشاء ملفات تعريف أساسية {:#creating-profile-rules}
- إنشاء ملفات Baseline Profiles وقياسها بدون Macrobenchmark
- تحسينات تنسيق DEX وملفات بدء التشغيل