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
130
PR_TIMESにおけるFastlyの導入と運用について.pptx.pdf
apple_yagi
1
42
PR TIMESにおけるNext.jsとcacheの付き合い方
apple_yagi
4
3.1k
開発速度を上げつつ品質を保つためのフロントエンド開発
apple_yagi
1
960
Other Decks in Technology
See All in Technology
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
"まず試す"ためのDatabricks Apps活用法 / Databricks Apps for Early Experiments and Validation
nttcom
1
230
AIエージェントを構築して感じた、AI時代のCDKとの向き合い方
smt7174
1
160
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
申請待ちゼロへ!AWS × Entra IDで実現した「権限付与」のセルフサービス化
mhrtech
1
280
新メンバーのために、シニアエンジニアが環境を作る時代
puku0x
0
630
Cortex Codeでデータの仕事を全部Agenticにやりきろう!
gappy50
0
350
インフラを Excel 管理していた組織が 3 ヶ月で IaC 化されるまで
geekplus_tech
3
170
レガシーシステムをどう次世代に受け継ぐか
tachiiri
0
330
組織的なAI活用を阻む 最大のハードルは コンテキストデザインだった
ixbox
6
1.6k
20260410 - CNTUG meetup #72 - DiskImage Builder 介紹:以 Kubespray CI 打造 RockyLinux 10 Cloud Image 為例
tico88612
0
120
Cortex Code君、今日から内製化支援担当ね。
coco_se
0
320
Featured
See All Featured
The SEO identity crisis: Don't let AI make you average
varn
0
440
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
450
Designing for humans not robots
tammielis
254
26k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
160
Everyday Curiosity
cassininazir
0
190
First, design no harm
axbom
PRO
2
1.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
96
Mobile First: as difficult as doing things right
swwweet
225
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
How to train your dragon (web standard)
notwaldorf
97
6.6k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
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 を有効にしてもうま くいきません。 まとめ