نظرة عامة على الملفات الشخصية الأساسية

تعمل الملفات الشخصية الأساسية على تحسين سرعة تنفيذ الرمز البرمجي بنسبة% 30 تقريبًا عن الإطلاق الأول، وذلك من خلال تجنُّب خطوات التفسير والتجميع أثناء التنفيذ (JIT) لمسار الرمز البرمجي المضمّن.

من خلال شحن ملف تعريف أساسي في تطبيق أو مكتبة، يمكن لنظام التشغيل Android (ART) تحسين مسارات الرمز البرمجي المحدّدة من خلال عملية الترجمة المسبقة (AOT)، ما يقدّم تحسينات في ملفوظة كل مستخدم جديد وكل تحديث للتطبيق. يتيح أسلوب "التحسين بالاستناد إلى الملف الشخصي" (PGO) للتطبيقات تحسين سرعة التشغيل وتقليل الارتباك في التفاعل وتحسين الأداء العام أثناء التشغيل للمستخدمين منذ أول عملية تشغيل.

تؤدي تحسينات الأداء هذه مباشرةً إلى تحسين مقاييس النشاط التجاري، مثل الحفاظ على المستخدمين والمعاملات والتقييمات. يمكنك الاطّلاع على مزيد من المعلومات عن كيفية تأثير الأداء في مقاييس النشاط التجاري من خلال قصص من Josh، Lyft، وTikTok، و Zomato.

مزايا الملفات الشخصية للمرجع

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

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

عند عدم استخدام ملف تعريف أساسي، يتم تجميع كل رمز التطبيق باستخدام تقنية JIT في الذاكرة بعد تفسيره، أو يتم كتابته في ملف odex في الخلفية عندما يكون الجهاز في وضع السكون. بعد تثبيت تطبيق أو تحديثه، يحصل المستخدمون على تجربة غير مثالية من أوّل مرة يشغّلون فيها التطبيق إلى أن يتم تحسين مسارات الرموز البرمجية الجديدة. تُسجِّل العديد من التطبيقات تحسُّنات في الأداء بنسبة% 30 تقريبًا بعد إجراء التحسينات.

الملفات الشخصية لبدء التشغيل

تشبه الملفات الشخصية لبدء التشغيل الملفات الشخصية للمرجع، ولكن الفرق هو أنّه يتم استخدامها في وقت الترجمة بدلاً من التحسين على الجهاز. يتم استخدام ملف بدء التشغيل لتحسين تنسيق ملف DEX لتحسين أوقات بدء التشغيل. يتم وضع الرمز المحدَّد في ملف بدء التشغيل الأساسي classes.dex ، ويتم وضع الرمز الآخر في ملفات DEX منفصلة. ويؤدي ذلك إلى تحسين أوقات بدء التشغيل من خلال تقليل عدد أخطاء الصفحة أثناء بدء تشغيل التطبيق. للاطّلاع على مزيد من المعلومات عن كيفية تحسين ملفات بدء التشغيل وتنسيق DEX لتحسين أوقات بدء تشغيل التطبيقات، اطّلِع على تحسينات تنسيق DEX وملفات بدء التشغيل.

البدء

لبدء تحسين الأداء في تطبيقك الحالي، اطّلِع على مقالة إنشاء ملف شخصي أساسي.

توفّر سلسلة التبعيات إصدارات الإصدارات الثابتة والإصدارات التطويرية. ل إنشاء ملف تعريف أساسي وتثبيته، استخدِم الإصدارات المتوافقة التالية أو الإصدارات الأحدث من المكوّن الإضافي لنظام Gradle ومكتبة Macrobenchmark وProfile Installer. تكون هذه التبعيات مطلوبة في أوقات مختلفة وتعمل معًا كسلسلة أدوات لإتاحة ملف تعريف أساسي مثالي.

  • المكوّن الإضافي لنظام Gradle المتوافق مع Android: com.android.tools.build:8.0.0
  • مكتبة قياس الأداء على مستوى التطبيق: androidx.benchmark:benchmark-macro-junit4:1.3.3
  • أداة تثبيت الملف الشخصي: androidx.profileinstaller:profileinstaller:1.4.1

ننصحك باستخدام أحدث إصدار من AGP لإنشاء "ملفّات تعريف الأداء الأساسي" وإدارتها. في ما يلي الوظائف الرئيسية التي تأتي مع إصدارات مختلفة من AGP:

إصدار ناقل AGP الميزات
8.4 عمليات تثبيت التطبيقات المحلية للإصدارات غير القابلة لتصحيح الأخطاء باستخدام أداة سطر الأوامر لملف Gradle المُلفِّف أو "استوديو Android" لإنشاء ملفات تعريف مرجعية، لكي يكون أداء إصدار الإصدار على الجهاز مطابقًا بشكلٍ أكبر للإصدار العلني. لا يؤثّر هذا التعديل في أداء الملفات الأساسية في مرحلة الإنتاج.
8.3
  • إتاحة دليل مجموعة المصادر بالكامل (وحدات المكتبة): يمكنك الآن تحديد ملفات مصدر متعددة للملف الشخصي الأساسي واستخدام ملف src/free/generated/baselineProfiles/baseline-prof1.txt وغيرها من الدلائل التي تراعي الصيغ، وذلك لوحدات المكتبة ووحدات التطبيق.
  • تتضمّن الملفات الشخصية للمرجع الفئات التي تمّ إزالة السكر منها.
8.2
  • إعادة كتابة القواعد باستخدام R8: يمكن أن تحوِّل أداتا D8 وR8 قواعد Baseline وStartup Profile القابلة للقراءة من قِبل البشر لتسجيل جميع القواعد التي تحتاج إليها لتحسين أداء التطبيق بالكامل. زيادة تغطية "الملف الشخصي الأساسي" للطرق بنسبة% 30 تقريبًا وزيادة أداء التطبيق بنسبة %15 تقريبًا
  • ملفات تعريف التطبيقات المبتدئة: يمكنك إنشاء هذا النوع الجديد من الملفات الأساسية لتحديد تنسيق الرمز البرمجي ضمن DEX. زيادة أداء بدء التشغيل بنسبة إضافية تبلغ ‏15% تقريبًا، أو أكثر بكثير للتطبيقات الكبيرة
من نظام التشغيل Android الحد الأدنى للإصدار المُقترَح: استخدِم المكوّن الإضافي Gradle Baseline Profile لإنشاء ملفات Baseline Profile باستخدام مهمة Gradle واحدة.
  • إتاحة دليل مجموعة المصادر الكاملة (وحدات التطبيق): يمكنك الإفصاح عن ملفات مصدر متعددة لملف الإصدار الأساسي واستخدام الأدلة التي تتضمّن معلومات عن الأسعار المتغيرة، مثل src/free/generated/baselineProfiles/baseline-prof1.txt.
7.4 الحد الأدنى للإصدار المتوافق: يمكن للتطبيقات استخدام الملفات الأساسية من المكتبات، وتوفير ملفاتها الأساسية الخاصة بها فيملف src/main/baseline-prof.txt.
  • يتم حزم الملفات الشخصية الأساسية بشكل صحيح عند إنشاء حزمة APK من حِزمة تطبيق (المشكلة رقم 230361284).
  • بالنسبة إلى التطبيقات التي تحتوي على أكثر من ملف .dex واحد، يتم حزم ملفات Baseline بشكل صحيح للملف الأساسي .dex

مثال على إنشاء الملف الشخصي

في ما يلي مثال على فئة لإنشاء ملف تعريف أساسي لبدء تشغيل التطبيق، بالإضافة إلى العديد من أحداث التنقّل والانتقال باستخدام مكتبة Macrobenchmark рекомендованной:

@OptIn(ExperimentalBaselineProfilesApi::class)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun appStartupAndUserJourneys() {
        baselineProfileRule.collect(packageName = PACKAGE_NAME) {
            // App startup journey.
            startActivityAndWait()

            device.findObject(By.text("COMPOSE LAZYLIST")).clickAndWait(Until.newWindow(), 1_000)
            device.findObject(By.res("myLazyColumn")).also {
                it.fling(Direction.DOWN)
                it.fling(Direction.UP)
            }
            device.pressBack()
        }
    }
}

يمكنك الاطّلاع على هذا الرمز في السياق الكامل وبمزيد من التفاصيل كجزء من عيّنات الأداء على GitHub.

مضمون الفيديو

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

إذا كنت تختبر طرقًا مختلفة لتحسين الأداء، ننصحك بتضمين الملفات الشخصية الأساسية لكلتا مجموعتَي التجربة. من خلال تنفيذ هذا الإجراء، يمكنك تسهيل تفسير النتائج من خلال التأكّد من أنّ جميع المستخدِمين يشغّلون باستمرار الرمز البرمجي المجمّع.

يمكن للمكتبات توفير ملفات تعريف مرجعية خاصة بها وإرسالها مع الإصدارات لتحسين أداء التطبيق. على سبيل المثال، اطّلِع على قسم "استخدام ملف تعريف أساسي" في ملف أداء Jetpack Compose.

آلية عمل الملفات الشخصية للمرجع

أثناء تطوير تطبيقك أو مكتبتك، ننصحك بتحديد الملفات الشخصية الأساسية لمحاولة تغطية تفاعلات المستخدمين الشائعة التي يكون فيها وقت العرض أو وقت الاستجابة مهمّين. في ما يلي آلية عملها:

  1. يتم إنشاء قواعد الملف الشخصي القابلة للقراءة من قِبل المستخدمين لتطبيقك وتجميعها في شكل ثنائي في التطبيق. ويمكنك العثور عليها في assets/dexopt/baseline.prof. ويمكنك بعد ذلك تحميل حِزمة APK المُعدّة للنشر على Google Play كالمعتاد.

  2. يعالج Google Play الملف الشخصي ويرسله مباشرةً إلى المستخدمين مع ملف APK. أثناء التثبيت، تُجري أداة ART عملية تجميع مسبقًا للطرق في الملف الشخصي، ما يؤدي إلى تنفيذ هذه الطرق بشكلٍ أسرع. إذا كان الملف الشخصي يحتوي على metoders المستخدَمة في تشغيل التطبيق أو أثناء عرض اللقطات، قد يلاحظ المستخدم تسريعًا في أوقات التشغيل وانخفاضًا في الارتباك.

  3. تتعاون هذه العملية مع تجميع "ملفات الأداء في السحابة الإلكترونية" لتحسين الأداء استنادًا إلى الاستخدام الفعلي للتطبيق بمرور الوقت.

الشكل 1. يوضّح هذا المخطّط البياني سير عمل الملف الشخصي الأساسي بدءًا من التحميل ووصولاً إلى تسليمه للمستخدم النهائي، وكيفية ارتباط سير العمل بملفات Cloud الشخصية.

الملفات الشخصية في السحابة الإلكترونية

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

على الرغم من أنّ ملفّات الأداء في السحابة الإلكترونية تستند إلى تفاعلات المستخدمين الفعلية مع التطبيق، فإنه يستغرق توزيعها عدة ساعات إلى أيام بعد توفّر التحديث، ما يحدّ من مدى توفّرها. إلى أن يتم توزيع الملفات الشخصية بالكامل، يكون أداء التطبيقات دون المستوى الأمثل لمستخدمي التطبيقات الجديدة أو التي تم تحديثها. بالإضافة إلى ذلك، لا تتوافق ميزة "ملف الظل على السحابة الإلكترونية" إلا مع أجهزة Android التي تعمل بالإصدار 9 (المستوى 28 لواجهة برمجة التطبيقات) أو إصدارًا أحدث، ولا يمكن توسيع نطاقها بشكل جيد إلا للتطبيقات التي تضم قاعدة مستخدمين كبيرة بما يكفي.

سلوك الترجمة على مختلف إصدارات Android

تستخدِم إصدارات نظام Android الأساسي أساليب مختلفة لتجميع التطبيقات، ولكل منها توازن أداء ملائم. تحسِّن الملفات الشخصية للمرجع من أسلوب compiling السابق من خلال توفير ملف شخصي لجميع عمليات التثبيت.

إصدار Android طريقة التحويل البرمجي منهج التحسين
من 5 إلى 6 (المستوى 21 إلى 23 لواجهة برمجة التطبيقات) المعالجة الكاملة للوقت المتقدّم يتم تحسين التطبيق بالكامل أثناء التثبيت، ما يؤدي بدوره إلى زيادة وقت الانتظار لاستخدام التطبيق وزيادة استخدام ذاكرة الوصول العشوائي ومساحة القرص، وتحميل الرمز البرمجي من القرص في وقت أطول، ما قد يؤدي بدوره إلى زيادة وقت بدء التشغيل بدون ذاكرة مُسبقة.
من الإصدار 7 إلى الإصدار 8.1 (المستوى 24 إلى المستوى 27 لواجهة برمجة التطبيقات) AOT الجزئي (ملف ملف شخصي أساسي) يتم تثبيت الملفات الشخصية الأساسية من قِبل androidx.profileinstaller في أول عملية تشغيل عندما تحدِّد ملف التطبيق هذا الاعتماد. يمكن أن تحسِّن أداة ART من ذلك بشكلٍ أكبر من خلال إضافة قواعد ملف شخصي إضافية أثناء استخدام التطبيق و compiling عند عدم استخدام الجهاز. يؤدي ذلك إلى تحسين مساحة القرص ووقت تحميل الرمز من القرص، وبالتالي تقليل وقت الانتظار للتطبيق.
الإصدار 9 (المستوى 28 لواجهة برمجة التطبيقات) والإصدارات الأحدث ملف تعريف AOT الجزئي (الملف الشخصي الأساسي +ملف تعريف السحابة الإلكترونية) يستخدم Play "الملفات الشخصية الأساسية" أثناء عمليات تثبيت التطبيقات بهدف تحسين الملفات الشخصية لـ APK و"سحابة Google"، إذا كانت متاحة. بعد التثبيت، يتم تحميل ملفات تعريف ART إلى Play وتجميعها ثم تقديمها كملفات تعريف في السحابة الإلكترونية للمستخدمين الآخرين عند تثبيتهم للتطبيق أو تحديثه.

المشاكل المعروفة

في ما يلي المشاكل والحلول المحتملة، أو المشاكل التي يتم تطوير حلول بديلة لها باستمرار:

  • قد يتعذّر إنشاء الملف الشخصي الأساسي بسبب إعدادات الأذونات على بعض الأجهزة، بما في ذلك أجهزة OnePlus. لحلّ هذه المشكلة، أوقِف خيار إيقاف مراقبة الأذونات في إعدادات خيارات المطوّرين.

  • لا تتوفّر ميزة إنشاء الملف الشخصي الأساسي على أجهزة "مركز الاختبار الافتراضي على Firebase"، بما في ذلك أجهزة "مركز الاختبار الافتراضي" التي تديرها Gradle (الخطأ رقم 285187547).

  • لتقديم ملفات Baseline Profile للمكتبات بنجاح، استخدِم مكوّن Baseline Profile Gradle الإضافي 1.2.3 أو AGP 8.3 على الأقل (الطلب رقم 313992099).

  • في حال إنشاء ملفات تعريف أساسية باستخدام الأمر ./gradlew app:generateBaselineProfile، يتم أيضًا تنفيذ مقاييس الأداء في وحدة الاختبار وتجاهل النتائج. في هذه الحالة، يمكنك إنشاء الملفات الشخصية الأساسية فقط من خلال تنفيذ الأمر مع -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile. تم حلّ هذه المشكلة في الإصدار 8.2 من AGP.

  • لا ينشئ الأمر لإنشاء الملفات الشخصية للمرجع لجميع أنواع الإصدارات سوى الملفات الشخصية للمرجع لنوع الإصدار. ./gradlew app:generateBaselineProfile تم حلّ هذه المشكلة في الإصدار 8.1 من AGP.

  • قد لا تتوافق قنوات توزيع التطبيقات التي لا تتبع "متجر Google Play" مع استخدام الملفات الشخصية الأساسية عند التثبيت. لا يستفيد مستخدمو التطبيقات المثبَّتة من خلال هذه القنوات من المزايا إلى أن يتم تشغيل أداة dexopt في الخلفية، وهو ما قد يتم أثناء الليل.

  • لا تتيح ميزة مشاركة التطبيقات مع الفريق الداخلي في "متجر Play" استخدام الملفات الشخصية الأساسية، ولكن يمكن استخدامها في مسار الاختبار الداخلي.

  • يمكن أن تتداخل تحسينات البطارية على بعض الأجهزة، مثل أجهزة Huawei، مع عملية تثبيت الملف الشخصي. للمساعدة في ضمان تثبيت ملفاتك الشخصية بفعالية، أوقِف أي تحسينات للبطارية في الأجهزة التي يتم قياس أدائها.

مصادر إضافية