تساهم "ملفات Baseline Profiles" في تحسين سرعة تنفيذ الرمز بنسبة% 30 تقريبًا من عملية التشغيل الأولى من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسارات الرموز البرمجية المضمّنة.
من خلال تضمين "الملف الشخصي للمرجع" في تطبيق أو مكتبة، يمكن وقت تشغيل Android (ART) تحسين مسارات الرموز المحدّدة من خلال عملية الترجمة المسبقة (AOT)، ما يؤدي إلى تحسين الأداء لكل مستخدم جديد ولكل تحديث للتطبيق. تتيح هذه الميزة، أي ميزة "التحسين المستند إلى الملف الشخصي" (PGO)، للتطبيقات تحسين عملية بدء التشغيل وتقليل إيقاف مؤقت لعرض واجهة المستخدم وتحسين الأداء العام لوقت التشغيل للمستخدمين منذ عملية الإطلاق الأولى.
تؤدي تحسينات الأداء هذه بشكل مباشر إلى تحسين مقاييس النشاط التجاري، مثل الحفاظ على المستخدمين والمعاملات والتقييمات. يمكنك الاطّلاع على مزيد من المعلومات حول تأثير الأداء في مقاييس النشاط التجاري من خلال قصص من Josh وLyft وTikTok وZomato.
مزايا "ملفات Baseline"
تتيح "ملفات تعريف الخط الأساس" إجراء عملية تجميع مسبق للرمز في تفاعلات المستخدمين المهمة، مثل بدء تشغيل التطبيق أو التنقّل بين الشاشات أو تمرير المحتوى، ما يجعل هذه التفاعلات أكثر سلاسة منذ أول مرة يتم فيها تشغيل التطبيق. من خلال زيادة سرعة التطبيق واستجابته، يمكن أن تؤدي "ملفات Baseline" إلى زيادة عدد المستخدمين النشطين يوميًا وارتفاع متوسط معدل معاودة الزيارة.
تساعد "ملفات Baseline Profiles" في توجيه عملية التحسين إلى ما هو أبعد من بدء تشغيل التطبيق من خلال توفير تفاعلات شائعة للمستخدمين تعمل على تحسين وقت تشغيل التطبيق منذ إطلاقه للمرة الأولى. لا تعتمد عملية الترجمة المسبقة الموجّهة على أجهزة المستخدمين، ويمكن إجراؤها مرة واحدة لكل إصدار على جهاز تطوير بدلاً من جهاز جوّال. من خلال إصدار التطبيقات مع الملف الشخصي للمرجع، تصبح تحسينات التطبيق متاحة بشكل أسرع بكثير من الاعتماد على ملفات تعريف السحابة الإلكترونية فقط.
عند عدم استخدام "الملف الشخصي للمرجع"، يتم إما تجميع كل رموز التطبيق في الذاكرة في الوقت المناسب بعد تفسيرها، أو كتابتها في ملف odex في الخلفية عندما يكون الجهاز غير نشط. بعد تثبيت تطبيق أو تحديثه، سيواجه المستخدمون تجربة غير مثالية
منذ المرة الأولى التي يشغّلون فيها التطبيق إلى أن يتم تحسين مسارات الرموز الجديدة.
تقيس العديد من التطبيقات تحسُّنًا في الأداء بنسبة% 30 تقريبًا بعد التحسين.
الملفات الشخصية لبدء التشغيل
تشبه ملفات بدء التشغيل ملفات Baseline، ولكن يتم استخدامها في وقت التجميع لتحسين تخطيط DEX من أجل تقليل أوقات بدء التشغيل، بدلاً من استخدامها في التحسين على الجهاز فقط. لمزيد من المعلومات حول الفرق بين ملفات تعريف بدء التشغيل وBaseline Profiles، يُرجى الاطّلاع على مقارنة ملفات تعريف Baseline Profiles بملفات تعريف بدء التشغيل. لمزيد من المعلومات حول تحسين تخطيط 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. هذه الاعتماديات مطلوبة في أوقات مختلفة وتعمل معًا كسلسلة أدوات لتفعيل "الملف الشخصي للمرجع" الأمثل.
- المكوّن الإضافي لنظام 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 | الميزات |
|---|---|
| 9.1 |
إتاحة دليل مجموعة رموز المصدر الكاملة (وحدات المكتبة):
بالإضافة إلى الأدلة التي تتوافق مع صيغ التطبيق، يمكنك تحديد
ملفات مصدر متعددة لـ "الملف الشخصي للمرجع" باسم اختياري،
مثل src/free/generated/baselineProfiles/baseline-prof1.txt،
لوحدات المكتبة ووحدات التطبيق.
|
| 8.4 | تثبّت عمليات تثبيت التطبيق المحلية للإصدارات غير القابلة لتصحيح الأخطاء باستخدام أداة سطر الأوامر Gradle Wrapper أو "استوديو Android" حِزم Baseline Profiles، وبالتالي يتطابق أداء إصدارك المحلي مع إصدار الإنتاج بشكل أكبر. لا يؤثّر هذا التعديل في أداء "ملفات المرجع" في الإصدار العلني. |
| 8.3 |
|
| 8.2 |
|
| من نظام التشغيل Android | الحد الأدنى للإصدار الذي ننصح به: استخدِم المكوّن الإضافي Baseline Profile Gradle لإنشاء ملفات Baseline Profiles باستخدام مهمة Gradle واحدة.
|
| 7.4 |
الحد الأدنى للإصدار المتوافق: يمكن للتطبيقات استخدام الملفات الشخصية للمرجع من المكتبات، وتوفير الملف الشخصي للمرجع الخاص بها في ملف src/main/baseline-prof.txt.
|
إعدادات مصدر الملف الشخصي التي تراعي صيغ الألوان
باستخدام الإصدار 8.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP) للتطبيقات والإصدار 8.3 من المكوّن الإضافي للمكتبات، يمكنك وضع قواعد الملف الشخصي للمرجع في دليل مجموعة رموز المصدر مخصّص، ما يتيح لك تجاوز القيود المفروضة على مسار واحد وثابت (على سبيل المثال، 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.
طريقة عمل "ملفات تعريف المرجع"
أثناء تطوير تطبيقك أو مكتبتك، ننصحك بتحديد "ملفات تعريف أساسية" لتغطية تفاعلات المستخدمين الشائعة التي يكون فيها وقت العرض أو وقت الاستجابة مهمًا. إليكم كيفية العمل:
يتم إنشاء قواعد الملف الشخصي التي يمكن لشخص عادي قراءتها لتطبيقك وتجميعها في شكل ثنائي في التطبيق. ويمكنك العثور عليها في
assets/dexopt/baseline.prof. يمكنك بعد ذلك تحميل "مجموعة حزمات تطبيق Android" (AAB) إلى Google Play كالمعتاد.يعالج Google Play الملف الشخصي ويرسله مباشرةً إلى المستخدمين مع حزمة APK. أثناء التثبيت، ينفّذ ART عملية تجميع مسبق (AOT) للطُرق الواردة في ملف التعريف، ما يؤدي إلى تنفيذ هذه الطرق بشكل أسرع. إذا كان الملف الشخصي يحتوي على طرق مستخدَمة عند تشغيل التطبيق أو أثناء عرض اللقطات، قد يستفيد المستخدم من سرعة تشغيل التطبيق وانخفاض معدّل حدوث تشوّش.
يتعاون سير العمل هذا مع تجميع "الملفات الشخصية على السحابة الإلكترونية" لضبط الأداء استنادًا إلى الاستخدام الفعلي للتطبيق بمرور الوقت.
المقارنة بين "ملفات تعريف بدء التشغيل" و"ملفات تعريف المرجع"
يمكنك استخدام المكوّن الإضافي Baseline Profile Gradle Plugin لتحديد ملفات الملف الشخصي للمرجع وإنتاجها.
تتكامل هذه الإضافة مع عملية الإنشاء، ويحوّل "مكوّن Android الإضافي في Gradle" قواعد الملفات الشخصية القابلة للقراءة هذه إلى تنسيق ثنائي، ويتم تجميعها في baseline.prof ضمن حزمة APK أو AAB، ويمكن لوقت تشغيل Android (ART) استخدامها بفعالية في عملية الترجمة على الجهاز فقط، شرط أن يكون حجمها أقل من 1.5 ميغابايت.
عادةً ما يتم تسمية ملفات البيانات هذه التي يتم إنتاجها startup-prof.txt وbaseline-prof.txt. على الرغم من أنّ محتواها قد يبدو متشابهًا في بعض الأحيان، خاصةً إذا كنت تركّز بشكل أساسي على بدء التشغيل، إلا أنّها تخدم أغراضًا مختلفة وتؤثّر في الأداء في مراحل مختلفة:
الملف الشخصي للمرجع
يحتوي ملف "الملف الشخصي للمرجع" على مجموعة شاملة من القواعد التي يستخدمها وقت تشغيل Android (ART) لتجميع مسارات الرموز المستخدَمة بشكل متكرّر مسبقًا، ما يؤدي إلى تحسين أداء التطبيق إلى ما هو أبعد من مجرد بدء التشغيل.
ملف الملف الشخصي للمرجع هو بشكل عام مجموعة شاملة من القواعد الواردة في 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 "ملفات تعريف خط الأساس" أثناء عمليات تثبيت التطبيقات لتحسين ملفات APK وملفات تعريف السحابة الإلكترونية، إذا كانت متاحة. بعد التثبيت، يتم تحميل ملفات ART الشخصية إلى Play وتجميعها، ثم يتم توفيرها كملفات شخصية على السحابة الإلكترونية للمستخدمين الآخرين عند تثبيت التطبيق أو تحديثه. |
المشاكل المعروفة
في ما يلي المشاكل والحلول المحتملة، أو المشاكل التي يتم حاليًا تطوير حلول بديلة لها:
قد يتعذّر إنشاء الملف الشخصي للمرجع بسبب إعدادات الأذونات على بعض الأجهزة، بما في ذلك أجهزة OnePlus. لتجنُّب هذه المشكلة، أوقِف الخيار إيقاف مراقبة الأذونات في إعدادات خيارات المطوّرين.
لا تتوافق عملية إنشاء "الملف الشخصي للمرجع" مع أجهزة مختبر Firebase الافتراضي، بما في ذلك أجهزة مركز الاختبار الافتراضي التي تديرها 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" استخدام "ملفات تعريف المرجع"، ولكن يتيحها مسار الاختبار الداخلي.
يمكن أن تتداخل تحسينات البطارية على بعض الأجهزة، مثل أجهزة Huawei، مع عملية تثبيت الملف الشخصي. للمساعدة في ضمان تثبيت ملفاتك الشخصية بشكل فعّال، أوقِف أي تحسينات للبطارية في أجهزة قياس الأداء.
مراجع إضافية
مُقترَحة لك
- ملاحظة: يتم عرض نص الرابط عندما تكون JavaScript غير مفعّلة.
- إنشاء ملفات تعريف أساسية {:#creating-profile-rules}
- إنشاء ملفات Baseline Profiles وقياسها بدون Macrobenchmark
- تحسينات على تنسيق DEX وملفات بدء التشغيل