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 氏