الملفات الشخصية الأساسية المرجعية باستخدام مكتبة مقاييس الأداء المجمّعة

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

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

@RunWith(AndroidJUnit4ClassRunner::class)
class ColdStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    // No ahead-of-time (AOT) compilation at all. Represents performance of a
    // fresh install on a user's device if you don't enable Baseline Profiles—
    // generally the worst case performance.
    @Test
    fun startupNoCompilation() = startup(CompilationMode.None())

    // Partial pre-compilation with Baseline Profiles. Represents performance of
    // a fresh install on a user's device.
    @Test
    fun startupPartialWithBaselineProfiles() =
        startup(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))

    // Partial pre-compilation with some just-in-time (JIT) compilation.
    // Represents performance after some app usage.
    @Test
    fun startupPartialCompilation() = startup(
        CompilationMode.Partial(
            baselineProfileMode = BaselineProfileMode.Disable,
            warmupIteration = 3
        )
    )

    // Full pre-compilation. Generally not representative of real user
    // experience, but can yield more stable performance metrics by removing
    // noise from JIT compilation within benchmark runs.
    @Test
    fun startupFullCompilation() = startup(CompilationMode.Full())

    private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated(
        packageName = "com.example.macrobenchmark.target",
        metrics = listOf(StartupTimingMetric()),
        compilationMode = compilationMode,
        iterations = 10,
        startupMode = StartupMode.COLD,
        setupBlock = {
            pressHome()
        }
    ) {
        // Waits for the first rendered frame, which represents time to initial display.
        startActivityAndWait()

        // Waits for content to be visible, which represents time to fully drawn.
        device.wait(Until.hasObject(By.res("my-content")), 5_000)
    }
}

في لقطة الشاشة التالية، يمكنك الاطّلاع على النتائج مباشرةً في "استوديو Android" لتطبيق Now in Android sample الذي تم تشغيله على Google Pixel 7. تُظهر النتائج أنّ بدء تشغيل التطبيق يكون أسرع عند استخدام "ملفات الأداء الأساسي" (229.0 ملي ثانية) مقارنةً بعدم إجراء عملية الترجمة (324.8 ملي ثانية).

نتائج ColdstartupBenchmark
الشكل 1. نتائج ColdStartupBenchmark التي تعرض الوقت المستغرَق للعرض الأوّلي بدون تجميع (324 ملي ثانية) والتجميع الكامل (315 ملي ثانية) والتجميع الجزئي (312 ملي ثانية) والملفات الشخصية الأساسية (229 ملي ثانية).

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

وقت ظهور الإعلان على الشاشة بالكامل

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

ننصحك بتحسين كلاً من TTID وTTFD، لأنّهما مهمّان. يساعد القيمة المنخفضة لملف TTID المستخدم في معرفة أنّ التطبيق يتم تشغيله فعليًا. من المهم إبقاء وقت الاستجابة للتفاعل مع التطبيق (TTFD) قصيرًا للمساعدة في ضمان تفاعل المستخدم مع التطبيق بشكل سريع.

للحصول على استراتيجيات حول إعداد التقارير عند اكتمال رسم واجهة مستخدم التطبيق بالكامل، يُرجى الاطّلاع على مقالة تحسين دقة توقيت بدء التشغيل.

  • ملاحظة: يتم عرض نص الرابط عندما تكون لغة JavaScript غير مفعّلة.
  • [كتابة اختبار أداء على مستوى التطبيق][11]
  • [تسجيل مقاييس الأداء الإجمالي][12]
  • [تحليل بدء تشغيل التطبيق وتحسينه {:#app-startup-analysis-optimization}][13]