تعمل "ملفات تعريف خط الأساس" على تحسين سرعة تنفيذ الرمز بنسبة% 30 تقريبًا من عملية التشغيل الأولى من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسارات الرموز البرمجية المضمّنة.
من خلال تضمين ملف Baseline Profile في تطبيق أو مكتبة، يمكن لوقت تشغيل Android (ART) تحسين مسارات الرموز المحدّدة من خلال عملية الترجمة المسبقة (AOT)، ما يؤدي إلى تحسين الأداء لكل مستخدم جديد ولكل تحديث للتطبيق. تتيح هذه الميزة، أي ميزة "التحسين الموجّه حسب الملف الشخصي" (PGO)، للتطبيقات تحسين عملية بدء التشغيل وتقليل التشويش الناتج عن التفاعل وتحسين الأداء العام لوقت التشغيل للمستخدمين منذ عملية الإطلاق الأولى.
تؤدي تحسينات الأداء هذه بشكل مباشر إلى تحسين مقاييس النشاط التجاري، مثل معدّل الاحتفاظ بالمستخدمين والمعاملات والتقييمات. يمكنك الاطّلاع على مزيد من المعلومات حول تأثير الأداء في مقاييس النشاط التجاري من خلال قصص من Josh وLyft وTikTok وZomato.
مزايا "ملفات تعريف المرجع"
تتيح "ملفات تعريف الخط الأساس" إمكانية تجميع الرمز البرمجي مسبقًا في تفاعلات المستخدمين المهمة، مثل بدء تشغيل التطبيق أو التنقّل بين الشاشات أو تمرير المحتوى، ما يجعل هذه التفاعلات أكثر سلاسة منذ أول مرة يتم فيها تشغيل التطبيق. من خلال زيادة سرعة التطبيق واستجابته، يمكن أن تؤدي "ملفات Baseline" إلى زيادة عدد المستخدمين النشطين يوميًا وارتفاع متوسط معدل معاودة الزيارة.
تساعد "ملفات تعريف خط الأساس" في توجيه عملية التحسين إلى ما هو أبعد من بدء تشغيل التطبيق من خلال توفير تفاعلات شائعة للمستخدمين تعمل على تحسين وقت تشغيل التطبيق منذ الإطلاق الأول. لا تعتمد عملية الترجمة المسبقة الموجّهة على أجهزة المستخدمين، ويمكن إجراؤها مرة واحدة لكل إصدار على جهاز تطوير بدلاً من جهاز جوّال. من خلال إصدار التطبيقات مع Baseline Profile، تصبح تحسينات التطبيق متاحة بشكل أسرع بكثير من الاعتماد على ملفات تعريف السحابة الإلكترونية فقط.
في حال عدم استخدام "ملف Baseline"، يتم تجميع كل رموز التطبيق في الذاكرة في الوقت المناسب بعد تفسيرها، أو كتابتها في ملف odex في الخلفية عندما يكون الجهاز غير نشط. بعد تثبيت تطبيق أو تحديثه، سيواجه المستخدمون تجربة غير مثالية
منذ المرة الأولى التي يشغّل فيها التطبيق إلى أن يتم تحسين مسارات الرموز البرمجية الجديدة.
تقيس العديد من التطبيقات تحسُّنًا في الأداء بنسبة% 30 تقريبًا بعد التحسين.
الملفات الشخصية لبدء التشغيل
تشبه ملفات بدء التشغيل ملفات Baseline Profile، ولكن يتم استخدامها في وقت الترجمة البرمجية لتحسين تخطيط DEX من أجل تقليل أوقات بدء التشغيل، بدلاً من تحسين الأداء على الجهاز. لمزيد من المعلومات حول الفرق بين ملفات بدء التشغيل وملفات Baseline، يُرجى الاطّلاع على مقارنة ملفات Baseline بملفات بدء التشغيل. لمزيد من المعلومات حول تحسين تخطيط 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.
|
إعدادات مصدر الملف الشخصي التي تراعي صيغ المنتج
باستخدام الإصدار 8.0 من "مكوّن Android الإضافي لبرنامج Gradle" للتطبيقات والإصدار 8.3 من "مكوّن Android الإضافي لبرنامج Gradle" للمكتبات، يمكنك وضع قواعد "الملف الأساسي" في دليل مجموعة مصادر مخصّص، ما يتيح لك تجاوز القيود المفروضة على مسار واحد وثابت (على سبيل المثال، src/main/baseline-prof.txt) واستخدام ملفات متعددة.
يسهّل ذلك توفير دعم قوي للرموز المتغيرة، ما يتيح لك تحديد "ملفات تعريف أساسية" مميزة ومخصّصة لأنواع ومذاقات إصدارات معيّنة (على سبيل المثال، باستخدام أدلة مثل 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 وStartup Profile
يمكنك استخدام مكوّن 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 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 وملفات بدء التشغيل