iOS 実機検証 ガチャイベントキャラクター ランファ 累積するメモリリーク
Description
累積メモリリーク
ガチャから、ホーム画面に戻っても、ガチャイベントキャラクター ランファの 立ち絵 画像preload が 保持されたまま。
それだけならば、よしとしても、再びガチャの画面にいくと、2個目の ランファ立ち絵を preload してしまう問題。
以下は、ガチャ 2回目 表示で ランファ立ち絵2枚目 preload
Comments (2)
ガチャに訪れる度に、ランファの立ち絵が preload され続けて累積していく現象を確認した。
0
{url: "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v…6c89f0b0bacf/085da1be-212b-4cf2-848d-53ffaf97c617", source: "unknown", bytes: 1540775, ms: 74}
1
{url: "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v…6c89f0b0bacf/085da1be-212b-4cf2-848d-53ffaf97c617", source: "unknown", bytes: 1540775, ms: 52}
2
{url: "https://utsaqkhxqllqkazxzhow.supabase.co/storage/v…6c89f0b0bacf/085da1be-212b-4cf2-848d-53ffaf97c617", source: "unknown", bytes: 1540775, ms: 71}
修正しました(PR #863、develop マージ済み)。
根本原因: useLayeredImagePreload がガチャ画面のマウントごとに fetch→新規 Blob→新規 objectURL を作り直していたため、訪問のたびに立ち絵(1540775 bytes)の再取得・再デコードが累積していました。参照カウント+バイト上限 LRU の blob-url-cache を新設し、同一 URL には常に同一 objectURL を返す構造に変更しています。
iOS シミュレータでの A/B 検証(ホーム⇄ガチャ20往復):
- 修正前: 立ち絵 fetch が直近100件中 24件(訪問ごとに累積 = このissueのログの再現)
- 修正後: 0件(初回の1回のみ)。再訪時も立ち絵は正常表示
実機でご確認いただく場合は、ガチャ⇄ホームを数回往復後に Web Inspector で __assetCacheMetrics.recent を見ると、supabase の立ち絵 fetch が初回の1件だけになっているはずです。
補足: 検証中に、立ち絵とは別の要因でホーム⇄ガチャ往復のメモリ累積(~20MB/往復、両ビルド共通)が残っていることを確認し、INS-923 として起票しました。実機で「まだ増える」と見える場合はそちらの現象です。再発防止のガードレール(lint / e2e 回帰テスト / 計測ハーネス修正)は PR #865 で追加しています。