Örnek Olaylar
Reddit, yüksek etkili performans iyileştirmeleri için R8 optimize ediciyi nasıl kullandı?
Okuma süresi: 4 dakika
Mobil uygulamaların yaygın olduğu günümüzde sorunsuz bir kullanıcı deneyimi sadece 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 elde tutma açısından önemli engeller olabilir. Reddit'teki mühendislik ekibi, Android Geliştirici İlişkileri ekibiyle birlikte çalışırken uygulaması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 optimizasyon aracı R8'in tüm gücünü etkinleştirmek için gerekli adımları atmaya karar verdiler. Bu odaklanılmış girişim sayesinde başlatma sürelerinde önemli iyileşmeler, yavaş veya donmuş karelerde ve ANR'lerde azalma ve Play Store puanlarında genel bir artış elde edildi. Bu örnek olay, Reddit'in bu etkileyici sonuçlara nasıl ulaştığını ayrıntılı olarak açıklıyor.
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 gerekir.En etkili olanlara hızlıca göz atalım.
- Uygulama boyutunu küçültmek için en önemli adım gereksiz kodları kaldırmaktı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, yöntem çağrılarını gerçek kodla değiştirerek uygulamanın performansını artırır.
- Kodu daha kompakt hale getirmek için sınıf birleştirme ve diğer stratejiler uygulanır. Bu noktada artık kaynak kodun insanlar tarafından okunabilirliği değil, derlenmiş 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ı küçültme, sınıfların, alanların ve yöntemlerin adlarını daha kısa ve anlamsız adlarla değiştirir. Bu nedenle,
MyDataModelyerine a adlı bir sınıfınız olabilir. - Kaynak küçültme , uygulama boyutunu daha da küçültmek için xml dosyaları ve çizilebilir öğeler gibi kullanılmayan kaynakları kaldırır.
R8 optimizasyonunun temel aşamaları
Sert verilerden kullanıcı memnuniyetine: Üretimde başarıyı belirleme
Reddit, uygulamanın yeni bir 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 kullanıcıların kullandığı gerçek cihazlarda performans metriklerini yakalayabildi. Bu sayede yeni sürümü önceki sürümlerle karşılaştırabildi.
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, % 25 daha iyi çerçeve oluşturma ve % 14 daha küçük uygulama boyutu elde etti.
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. Daha az ANR, daha kararlı ve güvenilir bir uygulamaya yol açarak kullanıcıların hayal kırıklığını azaltır. Daha akıcı çerçeve oluşturma, kullanıcı arayüzündeki duraklamaları ortadan kaldırarak kaydırma ve animasyonların akıcı ve duyarlı olmasını sağlar. Bu olumlu teknik etki, kullanıcı duyarlılığında da açıkça görüldü.
Optimizasyonun başarısına dair kullanıcı memnuniyeti göstergeleri doğrudan Google Play Store'da görülebiliyordu. R8 için optimize edilmiş sürümün kullanıma sunulmasının ardından ekip, kullanıcıların duyarlılığında ve etkileşiminde önemli ve olumlu bir değişim gözlemledi.
Drew Heavner: "R8'in tam potansiyelini 2 haftadan kısa sürede etkinleştirme"
En etkileyici yanı ise bu başarının odaklanarak elde edilmiş olmasıdır. Bu girişim üzerinde çalışan Reddit'teki Kıdemli Yazılım Mühendisi Drew Heavner, R8'in tam potansiyelini etkinleştirmek için yapılan değişikliklerin uygulanmasının iki haftadan kısa sürdüğünü belirtti.
Kazançları doğrulama: Makro karşılaştırmalarla ayrıntılı inceleme
Gerçek dünyadaki önemli iyileşmeleri gözlemleyen Reddit'in mühendislik ekibi ve Google'daki Android Geliştirici İlişkileri ekibi, kazanımları bilimsel olarak doğrulamak ve daha fazla optimizasyon denemek için ayrıntılı karşılaştırmalar yaptı. Bu analiz için Reddit mühendisleri, uygulamalarının iki sürümünü sağladı: biri optimizasyon içermeyen, diğeri ise R8'in yanı sıra iki temel performans optimizasyonu aracı (temel profiller ve başlangıç profilleri) uygulayan sürüm.
Temel profiller, tam zamanında (JIT) derleme adımlarını etkili bir şekilde kullanıcı cihazlarından geliştirici makinelerine taşır. Oluşturulan Ahead Of Time (AOT) derlenmiş kodun hem başlangıç süresini hem de 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. Bir kullanıcı uygulamayı açtığında, uygulama başlayana kadar bu dex dosyaları birbiri ardına yüklenir. Başlangıç profili sağlayarak d8'e ilk classes.dex dosyalarına hangi sınıfların ve yöntemlerin dahil edileceğini bildirirsiniz. Bu yapı, uygulamanın daha az dosya yüklemesini sağlar ve bu da başlangıç hızını artırır.
Jetpack Macrobenchmark, bu aşamada temel araç olarak kullanıldı ve kontrollü bir ortamda kullanıcı etkileşimlerinin hassas bir şekilde ölçülmesine olanak tanıdı. 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ırma 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şlatıldı ve kullanıcılar % 18 daha erken göz atmaya başlayabildi. Ayrıca, optimize edilmiş uygulamada tam zamanında (JIT) derleme oluşumlarında üçte iki oranında azalma ve JIT derleme süresinde üçte bir oranında düşüş görüldü. Kare oluşturma işlemi iyileştirildi. Bu sayede, karşılaştırma yapılan kullanıcı yolculuğunda % 19 daha fazla kare oluşturuldu. Son olarak, uygulamanın boyutu üçte birden fazla azaltıldı.
Reddit'in genel performans iyileştirmeleri
JIT derleme süresini aşağıdaki gibi özel bir Macrobenchmark iz 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 app/build.gradle.kts dosyanızı, yayınlanan derleme türünde minifyEnabled ve shrinkResources değerlerini true olarak ayarlayarak 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ımdan sonra uçtan uca kapsamlı testler yapılması gerekir. Bu tür 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 keep kurallarında belirterek kodun hangi bölümlerinin R8 tarafından değiştirilmemesi gerektiğini belirtmeniz gerekir.
Uygulamanızda Reddit'in örneğini kullanma
Reddit'in R8 ile elde ettiği başarı, uygulamasının performansında önemli ve az çabayla elde edilebilecek bir etki yaratmak isteyen tüm geliştirme ekipleri için güçlü bir örnek olay çalışmasıdır. Teknik iyileştirmeler ile kullanıcı memnuniyetindeki artış arasındaki doğrudan ilişki, performans optimizasyonunun değerini vurgulamaktadır.
Bu örnek olay incelemesinde belirtilen planı izleyerek (fırsatları belirlemek için Uygulama Performans Puanı gibi araçları kullanma, R8'in tam optimizasyon potansiyelini etkinleştirme, gerçek dünya verilerini izleme ve anlayışı doğrulamak ve derinleştirmek için karşılaştırmaları kullanma) diğer geliştiriciler de benzer kazanımlar elde edebilir.
Kendi uygulamanızda R8'i kullanmaya başlamak için R8 optimize edicisinin etkinleştirilmesi, yapılandırılması ve sorunlarının giderilmesiyle ilgili yeni güncellenen resmi belgelere ve kılavuza bakın.
Okumaya devam edin
-
Örnek Olaylar
Monzo, Birleşik Krallık'ta 15 milyon müşterisi olan ve büyümeye devam eden bir dijital bankadır. Uygulama ölçeklendikçe mühendislik ekibi, uygulamanın başlatılma süresinin iyileştirilmesi gereken kritik bir alan olduğunu belirledi ancak bunun kod tabanlarında önemli değişiklikler yapmayı gerektireceğinden endişelendi.
Ben Weiss • Okuma süresi: 2 dakika
-
Örnek Olaylar
TikTok, geniş kullanıcı tabanı ve yenilikçi özellikleriyle bilinen, dünya genelinde kullanılan bir kısa video platformudur.
Ben Trengrove, Ajesh Pai • Okuma süresi: 2 dakika
-
Örnek Olaylar
Sosyal medyanın dinamik dünyasında kullanıcıların ilgisi hızla kazanılır veya kaybedilir. Meta uygulamaları (Facebook ve Instagram), dünyanın en büyük sosyal platformları arasında yer alır ve dünya genelinde milyarlarca kullanıcıya hizmet verir.
Mayuri Khinvasara Khabya • Okuma süresi: 4 dakika
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.