Temel profiller etkinken bir uygulamanın nasıl performans gösterdiğini test etmek için Jetpack makro karşılaştırmasını kullanmanızı ve ardından bu sonuçları, temel profiller devre dışıyken yapılan bir karşılaştırmayla karşılaştırmanızı öneririz. Bu yaklaşımla, oluşturulan karelerin takılmaya neden olup olmadığını görmek için uygulama başlatma süresini (hem ilk hem de tam ekran görüntüleme süresi) veya çalışma zamanında oluşturma performansını ölçebilirsiniz.
Makro karşılaştırmalar, CompilationMode
API'sini kullanarak ölçüm öncesi derlemeyi kontrol etmenize olanak tanır. Performansı farklı derleme durumlarıyla karşılaştırmak için farklı CompilationMode
değerleri kullanın. Aşağıdaki kod snippet'inde, referans profillerin avantajını ölçmek için CompilationMode
parametresinin nasıl kullanılacağı gösterilmektedir:
@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) } }
Aşağıdaki ekran görüntüsünde, Google Pixel 7'de çalıştırılan Android'de kullanıma sunuldu örnek uygulamasının sonuçlarını doğrudan Android Studio'da görebilirsiniz. Sonuçlar, derleme yapılmadığında (324,8 ms) uygulamanın en hızlı şekilde temel profiller (229,0 ms) kullanılarak başlatıldığını gösteriyor.
Önceki örnekte, StartupTimingMetric
ile yakalanan uygulama başlatma sonuçları gösterilmektedir. FrameTimingMetric
gibi dikkate alınması gereken başka önemli metrikler de vardır. Tüm metrik türleri hakkında daha fazla bilgi için Makro karşılaştırma metriklerini yakalama başlıklı makaleyi inceleyin.
Tam gösterime kalan süre
Önceki örnekte, uygulamanın ilk karesini oluşturması için geçen süre olan ilk ekrana görüntülenene kadar geçen süre (TTID) ölçülür. Ancak bu, kullanıcının uygulamanızla etkileşime geçebileceği zamana kadar geçen süreyi yansıtmayabilir. Tam ekran görüntüleme süresi (TTFD) metriği, tamamen kullanılabilir bir uygulama durumuna sahip olmak için gereken kod yollarını ölçme ve optimize etme konusunda daha yararlıdır.
Her ikisi de önemli olduğundan hem TTID hem de TTFD için optimizasyon yapmanızı öneririz. Düşük bir TTID, kullanıcının uygulamanın gerçekten başlatıldığını görmesine yardımcı olur. Kullanıcının uygulamayla hızlı bir şekilde etkileşime geçebilmesi için TTFD'nin kısa tutulması önemlidir.
Uygulama kullanıcı arayüzü tamamen çizildiğinde raporlamayla ilgili stratejiler için Başlangıç zamanlaması doğruluğunu iyileştirme başlıklı makaleyi inceleyin.
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir
- [Makro karşılaştırma yazma][11]
- [Makro Karşılaştırma metriklerini yakalama][12]
- [Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-optimization}][13]