Başarılı Örnekler
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 odaklanmış 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çları nasıl elde ettiğini 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.
- Tree shaking, uygulamanın boyutunu küçültmek için en önemli adımdır. Bu adımda, 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 cihazlardaki 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, kare oluşturmada% 25 iyileşme ve uygulama boyutunda% 14 azalma gözlemledi.
Bu geliştirmeler, kullanıcı memnuniyeti için ç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 sorunsuz çerçeve oluşturma, kullanıcı arayüzü duraklaması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ülmektedir.
Optimizasyonun başarısına dair kullanıcı memnuniyeti göstergeleri doğrudan Google Play Store'da görünür hale geldi. R8 optimizasyonlu 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.
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ş 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 paketleneceğ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çü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ı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ı bilgiler 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. Optimize edilmiş uygulamada ayrıca tam zamanında (JIT) derleme oluşumlarında üçte ikilik bir azalma ve JIT derleme süresinde üçte birlik bir düşüş görüldü. Kare oluşturma iyileştirildi ve karşılaştırmalı kullanıcı yolculuğu boyunca % 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ımı, uçtan uca kapsamlı testler izlemelidir. 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 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
-
Başarılı Örnekler
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, Tracy Agyemang • Okuma süresi: 2 dakika
-
Başarılı Örnekler
Performans gerilemelerinin yeniden üretilmesi zordur. Bu nedenle, gerilemeler mobil geliştiriciler için büyük bir darboğaz oluşturur.
Alice Yuan, Arti Arutiunov, Nikita Ogorodnikov • Okuma süresi: 4 dakika
-
Başarılı Örnekler
FotMob, son 5 yıl içinde Wear OS'te yüklü kullanıcı kitlesi arasında tek günde en büyük artışı yaşadı. Bu artış, günlük ortalamanın 2-3 katıydı. Bu başarının sırrı, kullanıcıların Wear OS uygulamasını doğrudan telefonlarından keşfetmelerine yardımcı olan basit bir cihazlar arası yükleme akışıydı.
Garan Jenkin • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.