ShareChat mengatasi masalah Jank untuk meningkatkan scroll feed sebesar 60%
Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Pengantar
ShareChat adalah platform media sosial terkemuka di India yang memungkinkan pengguna berbagi pendapat, mendokumentasikan kehidupan mereka, dan menjalin pertemanan baru dalam bahasa asli mereka. Fitur lainnya meliputi ruang chat dan pesan pribadi, yang memungkinkan pengguna berbagi video, lelucon, lagu, dan konten sosial berbasis bahasa lainnya. Dengan misi untuk memelopori revolusi internet di India, ShareChat mengubah cara miliaran pengguna berikutnya akan berinteraksi di internet.
Aplikasi dalam angka
- 100 Juta+ download
- 180 Juta+ Pengguna Aktif Bulanan
- 32 Juta+ kreator konten
- 15 bahasa India berbeda
- ~1,5 Juta postingan dibuat setiap hari
Tantangan
Seiring ShareChat semakin disukai oleh ribuan orang setiap harinya, aplikasi ini menghadapi tantangan dalam mengirimkan frame baru secara konsisten yang menyebabkan waktu respons yang buruk yang menghambat pengalaman pengguna.
Akibatnya, aplikasi mengalami peningkatan jumlah frame yang turun atau tertunda (juga dikenal sebagai “Jank”). Memperbaiki masalah jank ini dengan meningkatkan periode frozen & lambat sangat penting dalam memberikan pengalaman yang lancar kepada semua penggunanya. Hal ini juga akan berperan penting dalam membuat pengguna menghabiskan lebih banyak waktu di aplikasi, meningkatkan interaksi dan, pada akhirnya, meningkatkan rating ShareChat di Android Play Store.
Bagaimana Mereka Melakukannya
ShareChat bekerja sama dengan tim hubungan developer Google untuk mengurangi Jank dan menghasilkan dampak bisnis yang positif dengan meningkatkan periode frozen & lambat di aplikasi. Secara khusus, mereka berupaya memperbaiki masalah berikut -
Kumpulan RecyclerView Bersama - Melalui pembuatan profil, kami mengamati bahwa pembuatan viewholder yang berbeda memerlukan waktu lebih lama dan untuk meminimalkannya, Pembuatan RecyclerView Bersama telah dibuat. Hal ini juga membantu meniadakan biaya kreasi pemegang tampilan untuk feed serupa.
Kartu Tata Letak Berlebihan - Melalui pembuatan profil, beberapa holder tampilan juga meminta requestLayouts tambahan. Untuk mengoptimalkan, kode diupdate untuk mengambil nilai dalam waktu pembuatan, bukan setiap binding, sehingga menghemat biaya requestLayout tambahan.
OverDraw - Menyederhanakan tata letak untuk mengurangi pelapisan dan menghapus warna yang ditetapkan secara terpisah untuk setiap lapisan.
Perataan hierarki - Mengamati inflation panjang melalui pembuatan profil dan pemeriksaan manual di banyak layar. Hierarki diratakan menggunakan ConstraintLayout untuk mengatasi hal ini.
Inflation Tampilan Berlebihan - Mengidentifikasi waktu inflation yang lama untuk tampilan tertentu saat membuat profil. Penayangan ini dikonversi ke viewtub.
Menghapus tugas berat dari UI thread - Penggunaan profiler memungkinkan pengamatan beberapa lokasi yang tugas-tugas beratnya sedang dilakukan di thread utama, seperti membuat SpannableStringBuilder dengan pemberian tag dan gaya visual setiap recyclerView bind, decoding BlurHash, dll. Tugas ini dihapus dari UI thread dan dipindahkan ke thread latar belakang.
Bermigrasi dari Rx ke Coroutine - Konsumsi memori juga menyebabkan panggilan GC yang sering, dan jumlah thread yang sangat tinggi melalui thread >100 RX. Banyak kasus penggunaan telah dipindahkan ke Coroutine untuk memperbaiki masalah ini.
Adopsi Coil untuk pemuatan gambar - Glide menyebabkan masalah saat memuat gambar, khususnya dalam komponen yang dibuat melalui jetpack compose. Diidentifikasi juga bahwa saat memuat gambar di LazyColumn, batang nilai minimum rendering tinggi. Kejadian ini menyebabkan penggunaan Coil untuk pemuatan gambar.
Pembersihan dan pemfaktoran ulang kode lama - Penghapusan kode dan eksperimen lama membantu menghapus tampilan tersembunyi yang tidak perlu dari UI dan membantu menulis ulang beberapa layar dengan cara yang lebih baik.
Hasil
Dengan menganalisis area peningkatan dan mengidentifikasi strategi pengoptimalan, ShareChat dapat meningkatkan pengalaman pengguna secara keseluruhan bagi pengguna sekaligus meningkatkan rasio engagement dan rating Play Store-nya. Di bawah ini adalah ringkasan kuantitatif hasil yang dicapai ShareChat -
- Penurunan ~45% dalam frame 'Dirender lambat' di Play Store
- Penurunan ~30% dalam periode 'Frozen' di Play Store
- Kecepatan frame yang tersendat untuk setiap 10 ribu frame yang dirender dikurangi dari 10,72% menjadi 3,98%
- Scroll feed meningkat sebesar 60%
- Peringkat keseluruhan di Store meningkat dari ~4.0 menjadi 4.3
- Peningkatan konsumsi postingan sebesar 10%
“Di ShareChat, tujuan kami adalah menjadi aplikasi media sosial terbaik yang pernah ada dan memuaskan pengguna kami.Hal ini juga berarti menjadi yang terbaik dalam hal performa aplikasi.
Kolaborasi kami dengan tim {i>developer Relations<i} Google membantu kami mengidentifikasi
area yang perlu ditingkatkan pada perangkat pengguna kelas bawah yang paling banyak digunakan. Kami mempelajari alat dan praktik performa terbaik untuk mengidentifikasi dan memperbaiki periode frozen, jank, overdraw, dan ANR.”
– Vihaan Verma, Engineering Manager, Tim Android di ShareChat
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-07-27 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 2025-07-27 UTC."],[],[],null,["# ShareChat addresses Jank issues to increase feed scrolling by 60%\n\nIntroduction\n------------\n\nShareChat is a leading social media platform in India that allows users to share their opinions, document their lives, and make new friends in their native language. Other features include chatrooms, and private messaging, enabling users to share videos, jokes, songs and other language-based social content. On a mission to spearhead India's internet revolution, ShareChat is changing how the next billion users will interact on the internet.\n\nThe app in numbers\n\n- **100 Million+** downloads\n- **180 Million+** Monthly Active Users\n- **32 Million+** content creators\n- **15** different Indian languages\n- **\\~1.5** Million posts created daily\n\nThe Challenge\n-------------\n\nAs ShareChat grew to be loved by thousands of people daily, the app faced a challenge in consistently delivering new frames leading to poor response times that impeded user experience.\n\nAs a result, the app saw an increased number of dropped or delayed frames (also known as \"Jank\"). Fixing these jank issues by improving slow \\& frozen frames was critical in delivering a seamless experience to all its users. This would also play an important role in making users spend more time on the app, increasing engagement and, in turn, improving ShareChat's rating on the Android Play Store.\n\nHow They Did It\n---------------\n\nShareChat worked with Google's developer relations team to reduce Jank and yield a positive business impact by improving slow \\& frozen frames (Jank) on the app. Specifically they worked on improving the following issues -\n\n- **Shared RecyclerView Pool** - Through profiling, it was observed that creating different viewholders takes longer and to minimize that, a Shared RecyclerView Pool was created. This also helped in removing the viewholders creational cost for similar feeds.\n\n- **Excessive Layout Passesl** - Through [profiling](https://perfetto.dev/), it was also observed that some viewholders were requesting additional requestLayouts. To optimize, the code was updated to take value in creation time instead of every bind, thus saving extra requestLayout costs.\n\n- **[OverDraw](https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering)** - Simplified the layouts to reduce layering and removing colors that were being set separately for each of the layers.\n\n- **Flattening of hierarchy** - Observed long inflation through profiling and manual inspection of many screens. The hierarchy was flattened using [ConstraintLayout](https://developer.android.com/reference/androidx/constraintlayout/widget/ConstraintLayout) to solve for this.\n\n- **Excessive View Inflation** - Identified long inflation time for certain views while profiling. These views were converted to viewstubs.\n\n- **Removing heavy tasks from UI thread** - Using a profiler allowed for observation of a couple of places where heavy tasks were being done on the main thread, such as creating SpannableStringBuilder with tagging and styling of every recyclerView bind, BlurHash decoding, etc. These tasks were removed from the UI thread and moved to a background thread.\n\n- **Migrating from Rx to [Coroutine](https://developer.android.com/kotlin/coroutines#:%7E:text=A%20coroutine%20is%20a%20concurrency,established%20concepts%20from%20other%20languages)** - Memory consumption also led to frequent GC calls, and there were very high thread counts via the \\\u003e100 RX thread. Many of the use cases were moved to Coroutine to fix these issues.\n\n- **Adoption of [Coil](https://coil-kt.github.io/coil/) for image loading** - Glide was causing issues while loading images, specifically in the components built via jetpack compose. It was also identified that while loading images in LazyColumn, the rendering threshold bar was high. These occurrences led to the adoption of Coil for image loading.\n\n- **Old code cleanup and refactoring** - Removal of old code and experiments helped to remove unnecessary hidden views from the UI and helped rewrite some of the screens in a better way.\n\nResults\n-------\n\nBy analyzing improvement areas and identifying optimization strategies, ShareChat could improve the overall experience for users while increasing its engagement rate and Play Store ratings. Below is the quantitative overview of the results ShareChat achieved -\n\n- \\~45% reduction in 'Slow rendered' frames on Play Store\n- \\~30% reduction in 'Frozen' frames on Play Store\n- Janky frame rates for every 10K frames rendered reduced from 10.72% to 3.98%\n- Feed-scrolling increased by 60%\n- The overall ratings on the Store increased from \\~4.0 to 4.3\n- 10% increase in consumption of posts\n\n\u003e \"At ShareChat, our goal is to be the best social media app out there that\n\u003e delights our users.This also means being the best in terms of app performance.\n\u003e Our collaboration with Google's developer relations team helped us identify\n\u003e areas of improvement on our most used low-end user devices. We learned the best\n\u003e performance practices and tools to identify and fix frozen frames, janks,\n\u003e overdraws, and ANRs.\"\n\u003e\n\u003e **-- Vihaan Verma, Engineering Manager, Android Team at ShareChat**"]]