Başarılı Örnekler

Reddit, yüksek etkili performans iyileştirmeleri için R8 optimize ediciyi nasıl kullandı?

Okuma süresi: 4 dk.
Ben Weiss'ın profilini görüntüle
Ben Weiss Geliştirici İlişkileri Mühendisi

Günümüzün mobil uygulama dünyasında sorunsuz bir kullanıcı deneyimi yalnızca bir özellik değil, aynı zamanda bir gerekliliktir. Yavaş yükleme süreleri, yanıt vermeyen arayüzler ve kararsızlık, kullanıcı etkileşimi ve kullanıcıları elde tutma açısından önemli engeller olabilir. Reddit'teki mühendislik ekibi, Android Geliştirici İlişkileri Ekibi ile birlikte çalışırken uygulamalarını değerlendirmek için Uygulama Performans Puanı'nı kullandı. Performanslarını değerlendirdikten sonra önemli bir iyileştirme potansiyeli olduğunu belirlediler ve Android uygulama optimize edici R8'in tüm gücünü etkinleştirmek için gerekli adımları atmaya karar verdiler. Bu odaklanmış girişim, başlatma sürelerinde kayda değer iyileştirmeler, yavaş veya donmuş karelerde ve ANR'lerde azalmalar ve Play Store puanlarında genel bir artış sağladı. Bu örnek olayda, Reddit'in bu etkileyici sonuçları nasıl elde ettiği ayrıntılı olarak açıklanmaktadır.

R8 Optimizer, Reddit'e nasıl yardımcı oldu?

R8 Optimizer, Android'de performans optimizasyonu için temel bir araçtır. Uygulama performansını artırmak için çeşitli adımlar atılır.En etkili olanlara kısaca göz atalım.

  • Tree shaking, bir uygulamanın boyutunu küçültmek için en önemli adımdır. Burada, uygulama bağımlılıklarından ve uygulamanın kendisinden kullanılmayan kodlar kaldırılır.
  • Yöntem satır içi kullanımı, yöntem çağrılarını gerçek kodla değiştirerek uygulamanın daha performanslı olmasını sağlar.
  • Kodu daha kompakt hale getirmek için sınıf birleştirme ve diğer stratejiler uygulanır. Bu noktada, kaynak kodun insanlar tarafından okunabilirliği değil, derlenen kodun hızlı çalışması önemlidir. Bu nedenle, arayüzler veya sınıf hiyerarşileri gibi soyutlamalar burada önemli değildir ve kaldırılır.
  • Tanımlayıcı sadeleştirme, sınıf, alan ve yöntem adlarını daha kısa ve anlamsız adlarla değiştirir. Bu nedenle, MyDataModel yerine a adlı bir sınıf elde edebilirsiniz.
  • Kaynak küçültme , uygulama boyutunu daha da küçültmek için XML dosyaları ve çizilebilir öğeler gibi kullanılmayan kaynakları kaldırır.
image.png

R8 optimizasyonunun ana aşamaları

Somut verilerden kullanıcı memnuniyetine: Üretimde başarıyı belirleme

Reddit, uygulamanın yeni sürümü kullanıcılara sunulduktan hemen sonra performans sonuçlarında iyileşme gördü. Reddit, Android vitals ve Crashlytics'i kullanarak gerçek cihazlarda gerçek kullanıcılarla performans metriklerini yakalayabildi ve yeni sürümü önceki sürümlerle karşılaştırabildi.

image.png

R8, Reddit'in uygulama performansını nasıl iyileştirdi?

Ekip, % 40 daha hızlı sıfırdan başlatma, "Uygulama Yanıt Vermiyor" (ANR) hatalarında% 30 azalma, kare oluşturmada% 25 iyileşme ve uygulama boyutunda% 14 azalma gözlemledi.

Bu geliştirmeler, kullanıcı memnuniyeti açısından çok önemlidir. Daha hızlı başlatma, daha az bekleme ve içeriğe daha hızlı erişim anlamına gelir. ANR sayısının azalması, uygulamanın daha kararlı ve güvenilir olmasını sağlayarak kullanıcıların yaşadığı sorunları azaltır. Daha akıcı kare oluşturma, kullanıcı arayüzü takılmalarını ortadan kaldırarak kaydırma ve animasyonların akıcı ve duyarlı olmasını sağlar. Bu olumlu teknik etki, kullanıcıların görüşlerinde de açıkça görüldü.

Optimizasyonun başarısını gösteren kullanıcı memnuniyeti göstergeleri Google Play Store'da doğrudan görülebiliyordu. R8 ile optimize edilmiş sürümün kullanıma sunulmasının ardından ekip, kullanıcıların yaklaşımında ve etkileşiminde önemli ve olumlu bir değişiklik gördü.

image.png

Drew Heavner: "R8'in tüm potansiyelini etkinleştirmek 2 haftadan kısa sürdü"

En etkileyici olanı ise bu başarının odaklanmış bir çabayla elde edilmiş olmasıdır. Reddit'te bu girişim üzerinde çalışan Kıdemli Yazılım Mühendisi Drew Heavner, R8'in tüm potansiyelini ortaya çıkarmak için gereken değişiklikleri uygulamanın iki haftadan kısa sürdüğünü belirtti.

Kazançları doğrulama: Makro karşılaştırmalarla ayrıntılı inceleme

Reddit'in mühendislik ekibi ve Google'daki Android Geliştirici İlişkileri ekibi, gerçek dünyadaki önemli iyileştirmeleri gözlemledikten sonra, elde edilen kazanımları bilimsel olarak doğrulamak ve daha fazla optimizasyon denemek için ayrıntılı karşılaştırmalar yaptı. Reddit mühendislik ekibi bu analiz için uygulamalarının iki sürümünü sağladı: Biri optimizasyon içermeyen, diğeri ise R8 ve iki temel performans optimizasyonu aracı daha (temel profiller ve başlangıç profilleri) uygulayan sürüm.

Baseline Profiles, tam zamanında (JIT) derleme adımlarını kullanıcı cihazlarından geliştirici makinelerine etkili bir şekilde taşır. Oluşturulan Ahead Of Time (AOT) derlenmiş kodunun, başlatma süresini ve oluşturma sorunlarını azalttığı kanıtlanmıştır.

Bir uygulama paketlendiğinde d8 dexer, sınıfları ve yöntemleri alıp uygulamanızın classes.dex dosyalarını oluşturur. Kullanıcı uygulamayı açtığında bu dex dosyaları, uygulama başlatılana kadar birbiri ardına yüklenir. Başlangıç Profili sağlayarak d8'e ilk classes.dex dosyalarına hangi sınıfları ve yöntemleri ekleyeceğini bildirirsiniz. Bu yapı, uygulamanın daha az dosya yüklemesini sağlayarak başlangıç hızını artırır.

Jetpack Macrobenchmark, bu aşamada kullanılan temel araç oldu ve kontrollü bir ortamda kullanıcı etkileşimlerinin hassas bir şekilde ölçülmesini sağladı. Tipik bir kullanıcı yolculuğunu simüle etmek için UIAutomator API'yi kullanarak uygulamayı açan, üç kez aşağı kaydıran ve ardından tekrar yukarı kaydıran bir test oluşturdular.

Sonuç olarak, karşılaştırmayı yazmak için gereken tek şey şuydu:

uiAutomator {

  startApp(REDDIT)

  repeat(3) {

    onView { isScrollable }.fling(Direction.DOWN) }

  repeat(3) {

    onView {isScrollable }.fling(Direction.UP)

  }

}

Karşılaştırma verileri, saha gözlemlerini doğruladı ve daha ayrıntılı analizler sağladı. Tamamen optimize edilmiş uygulama % 55 daha hızlı başladı ve kullanıcılar % 18 daha erken göz atmaya başlayabildi. Optimize edilen uygulamada ayrıca JIT derleme sayısında üçte iki oranında azalma ve JIT derleme süresinde üçte bir oranında azalma görüldü. Kare oluşturma iyileştirildi ve karşılaştırmalı kullanıcı yolculuğunda % 19 daha fazla kare oluşturuldu. Son olarak, uygulamanın boyutu üçte bir oranında küçültüldü.

image.png

Reddit'in genel performans iyileştirmeleri

JIT derleme süresini aşağıdaki gibi özel bir Macrobenchmark izleme bölümü metriğiyle ölçebilirsiniz:

val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")

Dönüşümün arkasındaki teknolojiyi etkinleştirme: R8

R8'i tam modda etkinleştirmek için yayınlanan derleme türünde minifyEnabled ve shrinkResources değerlerini true olarak ayarlayarak app/build.gradle.kts dosyanızı yapılandırın.

android {

    ...

    buildTypes {

        release {

            isMinifyEnabled = true

            isShrinkResources = true

            proguardFiles(

                getDefaultProguardFile("proguard-android-optimize.txt"),

                "keep-rules.pro",

            )

        }

    }

}

Performans optimizasyonları istenmeyen davranışlara yol açabileceğinden bu adımın ardından kapsamlı uçtan uca testler yapılmalıdır. Bu davranışları kullanıcılarınızdan önce tespit etmeniz daha iyi olur.

Bu makalenin önceki bölümlerinde gösterildiği gibi R8, performans avantajlarınızı en üst düzeye çıkarmak için kapsamlı optimizasyonlar gerçekleştirir. R8; sınıfları, alanları ve yöntemleri yeniden adlandırma, taşıma ve kaldırma gibi kodda önemli değişiklikler yapar. Bu değişikliklerin hatalara neden olduğunu fark ederseniz kodun hangi bölümlerinin R8 tarafından değiştirilmemesi gerektiğini saklama kurallarında belirtmeniz gerekir.

Reddit'in örneğini uygulamanızda kullanma

Reddit'in R8 ile elde ettiği başarı, uygulamalarının performansını önemli ölçüde ve az çabayla artırmak isteyen tüm geliştirme ekipleri için güçlü bir örnek olay incelemesidir. Teknik iyileştirmeler ile kullanıcı memnuniyetindeki artış arasındaki doğrudan ilişki, performans optimizasyonunun değerini vurguluyor.

Diğer geliştiriciler de bu örnek olayda açıklanan planı uygulayarak benzer kazanımlar elde edebilir. Bu plan, fırsatları belirlemek için Uygulama Performans Puanı gibi araçları kullanmayı, R8'in tam optimizasyon potansiyelini etkinleştirmeyi, gerçek verileri izlemeyi ve anlayışı doğrulamak ve derinleştirmek için karşılaştırmaları kullanmayı içerir.

Kendi uygulamanızda R8'i kullanmaya başlamak için R8 optimize ediciyi etkinleştirme, yapılandırma ve sorun giderme ile ilgili yeni güncellenen resmi belgelere ve kılavuzlara göz atın.

Yazan:
Okumaya devam et