日本語版
最新ニュース
世界

Grab が時間認識 LRU を使用して Android 上の画像キャッシュを最適化する方法

Android アプリの画像キャッシュ管理を改善するには、 Grab エンジニアは、最も最近使用されていない (LRU) キャッシュから時間認識の最も最近使用されていない (TLRU) キャッシュに移行しました。これにより、ユーザー エクスペリエンスを低下させたり、サーバー コストを増加させたりすることなく、より効果的にストレージを再利用できるようになります。 使用した Android アプリ「Grab」 グライド 主要な画像読み込みフレームワークとして、ネットワーク呼び出しを削減し、読み込み時間を短縮し、サーバーコストを削減するために、画像をローカルに保存する LRU キャッシュが含まれています。ただし、分析の結果、100 MB の LRU キャッシュの使用には重大な欠点があることがわかりました。多くのユーザーにとってキャッシュがすぐにいっぱいになり、パフォーマンスの低下につながることがよくありました。また、キャッシュがサイズ制限を超えなかった場合、画像が数か月間キャッシュされたままになり、ストレージが無駄になる場合もありました。 これらの制限を回避するために、時間ベースの有効期限を使用して LRU を拡張することにしました。 TLRU は 3 つのパラメータを使用します。 生存時間 (TTL)、キャッシュ エントリがいつ期限切れと見なされるかを決定します。ある 最小キャッシュ サイズのしきい値これにより、キャッシュが過少の場合に重要な画像が期限切れになってもキャッシュされたままになります。そして 最大キャッシュサイズ、ストレージの上限が強制されます。 Grab のエンジニアは、TLRU を最初から実装するのではなく、Glide をフォークして拡張することを選択しました。…

Grab が時間認識 LRU を使用して Android 上の画像キャッシュを最適化する方法

1773519411
2026-03-14 20:01:00

Android アプリの画像キャッシュ管理を改善するには、 Grab エンジニアは、最も最近使用されていない (LRU) キャッシュから時間認識の最も最近使用されていない (TLRU) キャッシュに移行しました。これにより、ユーザー エクスペリエンスを低下させたり、サーバー コストを増加させたりすることなく、より効果的にストレージを再利用できるようになります。

使用した Android アプリ「Grab」 グライド 主要な画像読み込みフレームワークとして、ネットワーク呼び出しを削減し、読み込み時間を短縮し、サーバーコストを削減するために、画像をローカルに保存する LRU キャッシュが含まれています。ただし、分析の結果、100 MB の LRU キャッシュの使用には重大な欠点があることがわかりました。多くのユーザーにとってキャッシュがすぐにいっぱいになり、パフォーマンスの低下につながることがよくありました。また、キャッシュがサイズ制限を超えなかった場合、画像が数か月間キャッシュされたままになり、ストレージが無駄になる場合もありました。

これらの制限を回避するために、時間ベースの有効期限を使用して LRU を拡張することにしました。 TLRU は 3 つのパラメータを使用します。 生存時間 (TTL)、キャッシュ エントリがいつ期限切れと見なされるかを決定します。ある 最小キャッシュ サイズのしきい値これにより、キャッシュが過少の場合に重要な画像が期限切れになってもキャッシュされたままになります。そして 最大キャッシュサイズ、ストレージの上限が強制されます。

Grab のエンジニアは、TLRU を最初から実装するのではなく、Glide をフォークして拡張することを選択しました。 ディスクLruキャッシュ 「成熟した、実戦試験を経た基盤」を活用した実装

この実装は Android エコシステム全体で広く採用されており、複製に多大な労力を必要とするクラッシュ回復、スレッド セーフ、パフォーマンスの最適化などの複雑なエッジ ケースを処理します。

DiskLruCache は、最終アクセス時刻の追跡サポートの追加、時間ベースのエビクション ロジックの実装、既存のユーザー キャッシュの移行メカニズムの組み込みなど、3 つの次元に沿って拡張する必要がありました。

最終アクセス時刻は、キャッシュ エントリを最新のアクセス順に並べ替えるために必要であり、アプリの再起動後も保持される必要がありました。時間ベースのエビクション ロジックは各キャッシュ アクセスで実行され、最も最近アクセスされていないエントリが削除される前に期限切れになっているかどうかを確認します。既存のキャッシュ移行の主な課題は、最終アクセスのタイムスタンプを LRU エントリに割り当てることでした。ファイルシステム API では信頼できるソースが提供されなかったため、Grab エンジニアはすべてのエントリに移行タイムスタンプを割り当てることにしました。

このアプローチでは、キャッシュされたコンテンツがすべて保存され、一貫したベースラインが確立されますが、エビクションの利点を最大限に活用するには 1 TTL 期間待つ必要があります。また、双方向の互換性も確保しました。元の LRU 実装では、タイムスタンプ サフィックスを無視して TLRU ジャーナル ファイルを読み取ることができ、必要に応じて安全なロールバックが可能になります。

もう 1 つの課題は、制御された実験に基づいて最適な構成値を見つけることでした。

私たちの成功基準は、TLRU への移行中にキャッシュ ヒット率の低下が 3 パーセンテージ ポイント (pp) 以内であることです。たとえば、ヒット率が 59% から 56% に低下すると、サーバー リクエストが 7% 増加します。このしきい値は、ストレージの最適化と許容可能なパフォーマンスへの影響のバランスをとります。

このアプローチを使用すると、アプリ ユーザーの 95% でキャッシュ サイズが 50 MB 削減され、上位 5% ではさらに大きな削減が見られました。これらの結果に基づいて、Grab エンジニアは、キャッシュ ヒット率を許容範囲内に維持し、サーバー コストを増加させることなく、デバイス全体でテラバイトのストレージを再利用できると推定しました。

元の投稿では、LRU の動作と TLRU の実装について、ここではカバーしきれない非常に貴重な詳細が提供されています。詳細については必ずお読みください。

#Grab #が時間認識 #LRU #を使用して #Android #上の画像キャッシュを最適化する方法

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。