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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryuya Yanagi
March 25, 2026
Technology
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
BFCacheを活用して無限スクロールのUX を改善した話
Ryuya Yanagi
March 25, 2026
More Decks by Ryuya Yanagi
See All by Ryuya Yanagi
XO から Oxlint に移行した話
apple_yagi
0
37
最近の推しリンター、Oxlintをご紹介
apple_yagi
0
770
forwardRef を禁止したくて Biome に PR を出した話
apple_yagi
0
180
PR_TIMESにおけるFastlyの導入と運用について.pptx.pdf
apple_yagi
1
84
PR TIMESにおけるNext.jsとcacheの付き合い方
apple_yagi
4
3.2k
開発速度を上げつつ品質を保つためのフロントエンド開発
apple_yagi
1
1k
Other Decks in Technology
See All in Technology
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
290
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
Webとヘルスデータ
yukukotani
0
100
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.8k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
130
書籍『生成AIの安全性入門』の入門
wataoka
0
150
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
20k
Digitization部 紹介資料
sansan33
PRO
2
7.8k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
210
KAEN Company Deck
kaen
PRO
0
240
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
1
540
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Skip the Path - Find Your Career Trail
mkilby
1
210
Everyday Curiosity
cassininazir
0
300
We Are The Robots
honzajavorek
0
330
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Rails Girls Zürich Keynote
gr2m
96
14k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
Darren the Foodie - Storyboard
khoart
PRO
3
3.8k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Visualization
eitanlees
152
17k
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 を有効にしてもうま くいきません。 まとめ