ShareChat はジャンクの問題に対処してフィードのスクロールを 60% 増加
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
はじめに
ShareChat はインドの大手ソーシャル メディア プラットフォームで、ユーザーは自分の母国語で意見の共有、日々の記録、友人作りができます。そのほかにチャットルームやプライベート メッセージも含まれ、ユーザーは動画、ジョーク、歌、その他の言語ベースのソーシャル コンテンツを共有できます。ShareChat は、インドのインターネット革命を先導することを使命として、今後 10 億人のユーザーがインターネットを利用する方法を変えようとしています。
数字で見るアプリ
- 1 億回以上ダウンロード
- 1 か月のアクティブ ユーザー数は 1 億 8,000 万人以上
- 3,200 万人以上のコンテンツ クリエイター
- 15 インドの言語
- 約 150 万 1 日の投稿作成数
課題
ShareChat は毎日何千人もの人々に愛されるようになるにつれ、新しいフレームを一貫して提供するという課題に直面し、応答時間が遅くなってユーザー エクスペリエンスが妨げられていました。
その結果、アプリでフレームの欠落や遅延(「ジャンク」とも呼ばれます)の数が増えました。すべてのユーザーにシームレスなエクスペリエンスを提供するには、遅いフレームやフリーズしたフレームを改善してジャンクの問題を修正することが不可欠でした。これは、ユーザーがアプリに費やす時間を増やし、エンゲージメントを高め、ひいては Android Play ストアでの ShareChat の評価を向上させるうえでも重要な役割を果たします。
活用方法
ShareChat は Google のデベロッパー リレーション チームと協力し、アプリの遅いフレームやフリーズしたフレーム(ジャンク)を改善することで、ジャンクを減らし、ビジネスにプラスの影響を与えました。具体的には、以下の問題の改善に取り組みました。
共有 RecyclerView プール - プロファイリングを通じて、異なるビューホルダーの作成には時間がかかり、これを最小限に抑えるために共有 RecyclerView プールが作成されることが判明しました。これにより、類似のフィードで視聴者の作成にかかる費用も削減できました。
過剰なレイアウト パス l - プロファイリングにより、一部のビューホルダーが追加の requestLayouts をリクエストしていることも確認されました。最適化するために、各バインドではなく作成時に価値を得るようにコードを更新し、requestLayout の余分なコストを節約しました。
OverDraw - レイアウトを簡略化してレイヤ化を減らし、レイヤごとに個別に設定されていた色を削除しました。
階層のフラット化 - 多くの画面のプロファイリングと手動検査を通じて、長期間のインフレーションが確認されました。これを解決するために、ConstraintLayout を使用して階層をフラット化しました。
過度のビュー インフレーション - プロファイリング中に、特定のビューのインフレーション時間が長いことが特定されました。これらのビューは view スタブに変換されました。
UI スレッドからの負荷の大きいタスクの削除 - プロファイラを使用することで、すべての recyclerView バインドのタグ付けとスタイル設定を伴う SpannableStringBuilder の作成、BlurHash のデコードなど、負荷の高いタスクがメインスレッドで行われているいくつかの場所を監視できるようになりました。これらのタスクは UI スレッドから削除し、バックグラウンド スレッドに移動しました。
Rx からコルーチンへの移行 - メモリの消費により GC 呼び出しが頻繁に発生し、100 を超える RX スレッドで非常に多くのスレッドが発生しました。これらの問題を修正するために、ユースケースの多くはコルーチンに移動しました。
画像の読み込みに Coil を採用 - 画像の読み込み時に、特に Jetpack Compose で構築されたコンポーネントでグライドが原因で問題が発生していました。また、LazyColumn で画像を読み込む際にレンダリングのしきい値の棒が高いことも判明しました。これをきっかけに、画像の読み込みに Coil が採用されました。
古いコードのクリーンアップとリファクタリング - 古いコードと試験運用版の削除により、不要な非表示ビューが UI から削除され、一部の画面をより適切に書き換えることができました。
結果
改善できる領域を分析し、最適化戦略を特定することで、ShareChat は、エンゲージメント率と Google Play ストアでの評価を高めると同時に、ユーザーの全体的なエクスペリエンスを向上させることができました。ShareChat が達成した成果の定量的概要を以下に示します。
- Google Play ストアで「遅いレンダリング」のフレームを約 45% 削減
- Google Play ストアで「フリーズ」フレームを約 30% 削減
- 10,000 フレームあたりのジャンク フレームレートを 10.72% から 3.98% に低減
- フィードのスクロールが 60% 増加
- ストアでの全体的な評価が約 4.0 から 4.3 に上昇しました。
- 投稿の利用が 10% 増加
「ShareChat の目標は、ユーザーに喜ばれる最高のソーシャル メディア アプリになることです。これはアプリのパフォーマンスの面でも最高であることも意味します。Google のデベロッパー リレーションズ チームとの協力により、使用頻度の高いローエンド ユーザー デバイスの改善点を特定することができました。フリーズしたフレーム、ジャンク、オーバードロー、ANR を特定して修正するための、最適なパフォーマンス プラクティスとツールを学びました。」
- ShareChat Android チーム エンジニアリング マネージャー Vihaan Verma 氏
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-27 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 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**"]]