Android Uygulama Başlatma Süreci İçin Profil Rehberliğinde Optimizasyon
Android soğuk başlatma (cold start) süremizi 1,2 saniyeden 380 ms'ye düşürdük.
Çoğu uygulama, ilk başlatma sırasında en yavaş derleme modunda çalışır. Android, bir kullanıcı uygulamanızı ilk kez yüklediğinde "interpret-only" (yalnızca yorumlama) modunu kullanır. Bu, uygulamanızın başlatılmasını yavaşlatır. Sistem, kodu ancak daha sonraki boş zamanlarda (idle time) optimize eder.
Bunu üç adımlı bir boru hattı (pipeline) kullanarak düzeltebilirsiniz.
Baseline Profile'lar Oluşturun Baseline Profile'lar, sisteme yükleme sırasında hangi sınıfların derleneceğini söyler. Bunları CI boru hattınızda oluşturmak için Macrobenchmark kullanın. Profilimiz metodların %12'sini kapsadı ancak başlatma süresinin %94'ünü yönetti.
DEX Düzeni Yeniden Sıralamasını (Layout Reordering) Etkinleştirin Bu, Gradle özelliklerinizde (properties) tek bir satırdır. R8'e, DEX dosyanızdaki başlatma sınıflarını bir araya getirmesini söyler. Bu, sayfa hatalarını (page faults) %30 ile %50 arasında azaltır. Sınıflar bir arada kaldığında, sistem diskten daha az gereksiz veri yükler.
Cloud Profile'ları Kullanın Google Play, kullanıcılardan profilleri toplar ve bunları yeni yüklemelere gönderir. Bu, hız kazanımlarınızı katlar.
Testlerimizin sonuçları:
- Profil yok: 1.204 ms soğuk başlatma
- Sadece Baseline Profile: 620 ms soğuk başlatma
- Baseline + DEX yeniden sıralama: 445 ms soğuk başlatma
- Baseline + DEX yeniden sıralama + Cloud: 380 ms soğuk başlatma
İş akışınız için önemli ipuçları:
- Her sürüm için CI'da profiller oluşturun. Güncelliğini yitirmiş (stale) profiller performans kaybına neden olur.
- R8 çalıştıktan sonra profilleri yeniden oluşturun. R8 kod yapınızı değiştirir.
- Macrobenchmark'ta "Partial" derleme modunu kullanın. "Full" modu, gerçek kullanıcı deneyimlerini yansıtmayan sahte sonuçlar verir.
- Farklı Android sürümlerinde test edin. Performans kazanımları, eski ve yeni API seviyeleri arasında farklılık gösterir.
Daha hızlı uygulamalar oluşturmak için bu katmanları üst üste ekleyin.
Kaynak: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a