Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
BFCacheを活用して無限スクロールのUX を改善した話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ryuya Yanagi
March 25, 2026
Technology
140
0
Share
BFCacheを活用して無限スクロールのUX を改善した話
Ryuya Yanagi
March 25, 2026
More Decks by Ryuya Yanagi
See All by Ryuya Yanagi
最近の推しリンター、Oxlintをご紹介
apple_yagi
0
180
forwardRef を禁止したくて Biome に PR を出した話
apple_yagi
0
120
PR_TIMESにおけるFastlyの導入と運用について.pptx.pdf
apple_yagi
1
42
PR TIMESにおけるNext.jsとcacheの付き合い方
apple_yagi
4
3k
開発速度を上げつつ品質を保つためのフロントエンド開発
apple_yagi
1
960
Other Decks in Technology
See All in Technology
建設的な現実逃避のしかた / How to practice constructive escapism
pauli
4
290
解剖"React Native"
hacusk
0
120
チームで育てるAI自走環境_20260409
fuktig
0
930
Kubernetes基盤における開発者体験 とセキュリティの両⽴ / Balancing developer experience and security in a Kubernetes-based environment
chmikata
0
210
プロダクトを触って語って理解する、チーム横断バグバッシュのすすめ / 20260411 Naoki Takahashi
shift_evolve
PRO
1
210
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
互換性のある(らしい)DBへの移行など考えるにあたってたいへんざっくり
sejima
PRO
0
560
AgentCore RuntimeからS3 Filesをマウントしてみる
har1101
3
370
【PHPカンファレンス小田原2026】Webアプリケーションエンジニアにも知ってほしい オブザーバビリティ の本質
fendo181
0
320
LLM とプロンプトエンジニアリング/チューターを定義する / LLMs and Prompt Engineering, and Defining Tutors
ks91
PRO
0
290
Autonomous Database - Dedicated 技術詳細 / adb-d_technical_detail_jp
oracle4engineer
PRO
5
13k
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
17k
Featured
See All Featured
Designing for Timeless Needs
cassininazir
0
190
Everyday Curiosity
cassininazir
0
190
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Why Our Code Smells
bkeepers
PRO
340
58k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
160
Done Done
chrislema
186
16k
The Pragmatic Product Professional
lauravandoore
37
7.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Writing Fast Ruby
sferik
630
63k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Transcript
BFCacheを活用して無限スクロールのUX を改善した話 エンジニアとデザイナーで考えるUI/UX LT会@FE Yatai やなぎ @apple_yagi
やなぎ PR TIMES フロントエンドエンジニア X: @apple_yagi 好きな UI ライブラリは Base
UI です
無限スクロールを実装したことある人
https://gigazine.net/news/20260217-eu-kill-infinite-scrolling/ 余談
https://prtimes.jp/main/action.php?run=html&page=searchkey&search_word=fusic 私が実装した無限スクロールUI
元々 jQuery で実装されていたページを Next.js(Pages Router)にリプレイス 検索結果のリンクは next/link を使っていない ソフトナビゲーション(SPA遷移)ではなくハードナビゲーション ↑ここ大事
私が実装した無限スクロールUI
実装はできたが問題が。 。
ブラウザバックすると読み込んでいたデータが消える
ブラウザバックすると読み込んでいたデータが消える
スクロール位置や読み込んだデータをページ遷移前に sessionStorage とかに保存 してブラウザバック時に復元する? URL にスクロール位置をクエリパラメータ(例:?page=5)に保存しておいてブ ラウザバック時にそのページのデータをfetchする? 実装が複雑になるな どうやって改善するか
色々調べているととある記事を発見
None
これか?!
バックフォワード キャッシュ(bfcache)では、ユーザーがページから移動したと きにページを破棄するのではなく、破棄を延期して JS の実行を一時停止します。 ユーザーがすぐに戻った場合は、ページを再び表示し、JS の実行を再開します。 これにより、ユーザーはほぼ瞬時にページを移動できます。 https://web.dev/articles/bfcache?hl=ja BFCache
とは
ブラウザバック時に JS の実行を再開することができる 読み込んだデータを保持できる(React の useState の状態も復元できる) スクロール位置も保持することができる BFCache を有効にすることで
unload イベントは使用しない Cache-Control: no-store を使用しない ページ遷移する前に IndexedDB 接続や fetch/XMLHttpRequest、WebSocket など
を切断する next dev でサーバーを立ち上げた場合、WebSocket が使用されているので BFCache は効かない。開発環境でも next start で立ち上げて確認する必要 がある https://web.dev/articles/bfcache?hl=ja#optimize ※ ブラウザの種類やインストールしている拡張ツールによって挙動が変わるので確 実に BFCache を有効にするのはむずかしい BFCache を有効にするためには
検証ツール → アプリケーションタブ → バックフォワードキャッシュ BFCache が有効になっているか確認する(Chrome)
Cache-Control に no-store が設定されてるな
リプレイス前の Cache-Control ヘッダーを参考にしていたが経緯が不明 Cache-Control: private, no-cache, no-store, max-age=0, must- revalidate
になっていたので絶対にキャッシュしたくないんだろうなという 意思は感じる 社内で検討した結果、外しても問題なさそうだったので no-store を削除 そもそも Cache-Control: no-store が必要か
Cache-Control: no-store ブラウザやCDNなどのキャッシュサーバーに、レスポンスの保存を一切許可しな い Cache-Control: no-cache ブラウザやCDNがレスポンスをキャッシュすることは許可するが、再利用する前 に必ずサーバーへそのキャッシュが有効か問い合わせ(検証)を行う no-cache と言いつつキャッシュを許可するので注意
補足:no-store と no-cache の違い
再度 BFCache が有効になっているか確認すると
None
https://prtimes.jp/main/action.php?run=html&page=searchkey&search_word=fusic 実際にスクロール位置が保持されるか確認
トップページ のスマホビュー 弊社で BFCache を有効活用している他事例
無限スクロール、ブラウザバック時にデータ消える問題を BFCache を利用して 解決した BFCache を有効にすることでブラウザバック時に JS の実行を再開することが できる BFCache
を有効するためには unload イベントや、 Cache-Control: no-store を 使用しない ※ 今回はハードナビゲーションのページ遷移時の BFCache の有効化について説明し ました。ソフトナビゲーション(SPA遷移)の場合は BFCache を有効にしてもうま くいきません。 まとめ