ShareChat, Jank'ın sorunlarını gidererek feed kaydırma oranını %60 oranında artırdı.

Giriş

ShareChat, kullanıcıların ana dillerinde düşüncelerini paylaşmalarına, hayatlarını belgelemelerine ve yeni arkadaşlar edinmelerine olanak tanıyan, Hindistan'ın önde gelen sosyal medya platformlarından biridir. Diğer özellikler arasında, kullanıcıların video, espri, şarkı ve dile dayalı diğer sosyal içerikleri paylaşmalarına olanak tanıyan sohbet odaları ve özel mesajlaşma yer alır. Hindistan'ın internet devrimine öncülük etmeyi amaçlayan ShareChat, bir milyar yeni kullanıcının internette etkileşime geçme şeklini değiştiriyor.

Sayılarla uygulama

  • 100 milyondan fazla indirme
  • 180 Milyondan Fazla Aylık Etkin Kullanıcı
  • 32 Milyondan fazla içerik üretici
  • 15 farklı Hint dili
  • Her gün yaklaşık 1,5 milyon yayın oluşturuluyor

Hedef

ShareChat her gün binlerce kişi tarafından sevilir hale geldikçe uygulama sürekli yeni kareler sunmakta güçlük çekiyordu. Bu da yanıt sürelerinin yetersiz olmasına yol açarak kullanıcı deneyimini olumsuz etkiledi.

Bunun sonucunda uygulama, atlanan veya geciken kare sayısında artış gördü (Jank olarak da bilinir). Yavaş ve donmuş kareleri iyileştirerek bu olumsuzluk sorunlarını düzeltmek, tüm kullanıcılarına sorunsuz bir deneyim sunmak açısından kritik öneme sahipti. Bu ayrıca, kullanıcıların uygulamada daha fazla zaman geçirmelerini sağlamada da önemli bir rol oynar, etkileşimi artırır ve böylece ShareChat'in Android Play Store'daki puanını artırır.

Nasıl yaptılar?

ShareChat, Jank'ı azaltmak ve uygulamadaki yavaş ve donmuş kareleri (Jank) iyileştirerek iş üzerinde olumlu bir etki yaratmak için Google'ın geliştirici ilişkileri ekibiyle birlikte çalıştı. Özellikle aşağıdaki sorunları iyileştirmeye çalıştılar:

  • Paylaşılan RecyclerView Havuzu: Profil oluşturma uygulanarak, farklı görünüm sahipleri oluşturmanın daha uzun sürdüğü ve bu süreyi en aza indiren bir Paylaşılan RecyclerView Havuzu oluşturulduğu görüldü. Bu, benzer feed'ler için görüntüleme sahibinin oluşturma maliyetini de ortadan kaldırmaya yardımcı oldu.

  • Aşırı Düzen Geçişi - Profil kaldırma sırasında, bazı görüntüleme sahiplerinin ek requestLayouts öğeleri istediği de gözlemlendi. Optimize etmek için kod, her bağlama yerine oluşturma zamanında değer alacak şekilde güncellendi. Böylece ek requestLayout maliyetinden tasarruf edildi.

  • OverDraw: Katmanların her biri için ayrı ayrı ayarlanan katmanların kullanımını ve renklerini kaldırmalarını sağlayacak düzenler basitleştirildi.

  • Hiyerarşinin düzleşmesi: Profil çıkarma ve çok sayıda ekranı manuel olarak inceleme yoluyla uzun süreli artış gözlemlendi. Hiyerarşi, bu sorunu çözmek için ConstraintLayout kullanılarak düz hale getirildi.

  • Aşırı Gösterim Enflasyonu - Profil oluşturma sırasında belirli görünümler için uzun inflasyon süresi tanımlanır. Bu görüntülemeler, görüntüleme küvetlerine dönüştürüldü.

  • Kullanıcı arayüzü iş parçacığından ağır görevleri kaldırma: Profil oluşturucu, ana iş parçacığında ağır görevlerin yapıldığı birkaç yerin gözlemlenmesine olanak tanıdı. Örneğin, her recyclerView bağlamasının etiketlenmesi ve stilinin belirlenmesi ve bulanıklaştırmanın kodunun çözülmesi gibi işlemler için SpanableStringBuilder oluşturma işlemi yapıldı. Bu görevler, kullanıcı arayüzü iş parçacığından kaldırıldı ve bir arka plan iş parçacığına taşındı.

  • Rx'ten Coroutine'e geçiş: Bellek kullanımı, sık GC çağrılarına neden oldu ve 100'den fazla RX iş parçacığı aracılığıyla çok yüksek iş parçacığı sayıları elde edildi. Kullanım alanlarının çoğu, bu sorunları düzeltmek için Coroutine'e taşındı.

  • Resim yükleme için Boil'in kullanılması: Glide, özellikle jetpack oluşturma özelliğiyle oluşturulan bileşenlerde resim yüklerken sorunlara neden oluyordu. Ayrıca, LazyColumn'da resimler yüklenirken oluşturma eşiği çubuğunun yüksek olduğu da tespit edildi. Bu durumlar, resim yükleme için Coil'in benimsenmesine yol açmıştır.

  • Eski kodları temizleme ve yeniden düzenleme: Eski kodun ve denemelerin kaldırılması, kullanıcı arayüzündeki gereksiz gizli görünümlerin kaldırılmasına ve bazı ekranların daha iyi bir şekilde yeniden yazılmasına yardımcı oldu.

Sonuçlar

ShareChat, iyileştirme alanlarını analiz edip optimizasyon stratejilerini belirleyerek bir yandan kullanıcıların genel deneyimini iyileştirirken bir yandan da etkileşim oranını ve Play Store puanlarını artırabilir. Aşağıda, ShareChat'in elde ettiği sonuçlara dair niceliksel bir genel bakış verilmiştir -

  • Play Store'daki "Yavaş oluşturulan" karelerde yaklaşık% 45 azalma
  • Play Store'daki "Donmuş" karelerde yaklaşık% 30 azalma
  • Oluşturulan her 10.000 kare için olumsuz kare hızları% 10,72'den %3,98'e düşürüldü
  • Feed kaydırma %60 arttı
  • Play Store'daki toplam puan 4,0'dan 4,3'e yükseldi
  • Gönderi tüketiminde% 10 artış

"ShareChat'te amacımız, kullanıcılarımızı memnun eden en iyi sosyal medya uygulaması olmaktır.Bu aynı zamanda uygulama performansı açısından da en iyisi olmak anlamına gelir. Google’ın geliştirici ilişkileri ekibiyle yaptığımız ortak çalışma, en çok kullanılan düşük teknolojili kullanıcı cihazlarımızda iyileştirilebilecek alanları belirlememize yardımcı oldu. Donmuş kareleri, olumsuzlukları, fazla çizimleri ve ANR'leri tespit edip düzeltmek için en iyi performans uygulamalarını ve araçlarını öğrendik."

– Vihaan Verma, Mühendislik Yöneticisi, Android Ekibi, ShareChat