Uygulama Boyutu Neden Önemli ve Nasıl Küçültülür?
Kullanıcı mobil veriyle indirirken boyuta bakıyor. Uygulama boyutu bir estetik tercih değil, doğrudan dönüşüm meselesi.
Uygulama boyutu, geliştiricinin en az önemsediği ama kullanıcının en çok gördüğü ölçütlerden biri. Mağaza sayfasında dosya boyutu yazıyor ve mobil veriyle indiren kullanıcı ona bakıyor.
Boyutun doğrudan etkilediği üç şey var: indirme oranı (özellikle yavaş bağlantıda), güncelleme oranı (büyük güncellemeyi kullanıcı erteliyor) ve cihazda kapladığı yer (yer açmak isteyen kullanıcı en büyük uygulamayı siliyor).
Önce ölçün: içeride ne var?
Tahminle optimizasyon yapmak zaman kaybı. İki platformda da paketin içinde neyin ne kadar yer kapladığını gösteren araçlar var — Android Studio'da APK Analyzer, Xcode tarafında derleme sonrası oluşan boyut raporu.
Baktığımda neredeyse her seferinde ilk sırada aynı iki şey çıkıyor: görseller ve kullanılmayan kütüphane kodu.
1. Android App Bundle kullanın
Tek bir APK dosyası, tüm ekran yoğunlukları ve tüm işlemci mimarileri için gereken her şeyi taşımak zorunda. App Bundle formatında ise Google Play, her cihaza yalnızca o cihazın ihtiyaç duyduğu parçaları gönderiyor.
Bu, tek satır kod değiştirmeden alınan bir kazanç. Yayın formatını değiştirmek yeterli.
2. Kod küçültmeyi açın
Android tarafında R8, kullanılmayan sınıfları ve metotları atıyor, kalan isimleri kısaltıyor. Varsayılan olarak kapalı geldiği için birçok projede hiç açılmıyor.
android {
buildTypes {
release {
minifyEnabled true // kullanılmayan kodu at
shrinkResources true // kullanılmayan kaynakları at
}
}
}
Yansıma (reflection) ile erişilen sınıflar R8 tarafından "kullanılmıyor" sanılıp atılabiliyor. Bu, yalnızca yayın sürümünde çıkan çökmelere yol açıyor. Küçültmeyi açtıktan sonra yayın sürümünü baştan sona bir kez gezin ve sembol dosyasını yüklemeyi unutmayın.
3. Görseller: en büyük kazanç burada
Deneyimlediğim kadarıyla boyutun en büyük kısmı görseller ve en kolay kazanç da burada.
- Vektör kullanın. İkonlar ve basit çizimler için vektör tek dosya; PNG ise her ekran yoğunluğu için ayrı dosya demek.
- Fotoğrafları WebP'ye çevirin. Aynı görsel kalitesinde belirgin şekilde daha küçük dosya veriyor.
- Gerçek boyutunda yükleyin. 300 piksellik bir alanda gösterilecek görseli 3000 piksel genişliğinde paketlemek hem boyutu hem belleği şişiriyor.
- Kullanılmayanları silin. Projede zamanla biriken, artık hiçbir ekranda kullanılmayan görseller şaşırtıcı yer kaplıyor.
4. Kütüphaneleri gözden geçirin
Tek bir yardımcı fonksiyon için eklenen büyük bir kütüphane, kendi ağırlığını da beraberinde getiriyor. Bağımlılık listesine bakıp şunu sormak faydalı: bunu gerçekten kullanıyor muyum, yoksa bir tek fonksiyonu için mi duruyor?
Bu sitede de aynı yaklaşımı uyguladım: hiçbir framework kullanmadan saf HTML, CSS ve JavaScript ile yazıldı. Çoğu zaman en hızlı çözüm, eklememek oluyor.
5. Büyük içeriği sonradan indirin
Herkesin ihtiyaç duymadığı büyük varlıkları — ek dil paketleri, yüksek çözünürlüklü içerik, oyun seviyeleri — kuruluma dahil etmek yerine ihtiyaç anında indirmek mümkün. İki platform da bunun için mekanizma sunuyor.
Bu, ilk indirme boyutunu belirgin şekilde düşürüyor; asıl fark yaratan da o ilk indirme oluyor çünkü kullanıcı kararını orada veriyor.
Bir kez yapıp bırakmayın
Boyut zamanla sessizce büyüyor: her sürümde bir görsel, bir kütüphane, bir özellik ekleniyor. Sürüm öncesi kontrol listeme boyutu not etmeyi ekledim; bir önceki sürüme göre beklenmedik bir artış varsa sebebini yayından önce buluyorum.
Kullanıcı uygulamanızın ne kadar iyi yazıldığını bilmiyor. Bildiği tek teknik ayrıntı, indirmenin ne kadar sürdüğü.
- Uygulama boyutu
- App Bundle
- R8
- Görsel optimizasyonu
- Performans
Demir Taşdemir
Mobil Uygulama & Web Geliştirici
2018'den beri yazılım geliştiriyorum. App Store ve Google Play'de 11 uygulama yayınladım; şu an 6 mobil uygulama, 1 e-ticaret platformu ve 1 masaüstü oyun üzerinde çalışıyorum.
Ölçüp iyileştirmeyi seven biri
Somut sayıya bağlanabilen iyileştirmeler, tartışmayı bitiren iyileştirmelerdir.