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
NIFTY Tech Talk #09 ニフティトップのNext.jsでのキャッシュ戦略を考えた話
Search
ニフティ株式会社
PRO
March 08, 2023
Video
Resources
Programming
0
860
NIFTY Tech Talk #09 ニフティトップのNext.jsでのキャッシュ戦略を考えた話
ニフティ株式会社
PRO
March 08, 2023
Tweet
Share
Video
Resources
SvelteKit, Next.jsの導入事例紹介など 〜ニフティのフロントエンドの今とこれから〜 - NIFTY Tech Talk #9
https://nifty.connpass.com/event/273568/
More Decks by ニフティ株式会社
See All by ニフティ株式会社
2つのスクラムチームの 調和的な協働・連携について - ニフティのスクラムトーク Vol. 3 / NIFTY Tech Talk #19
niftycorp
PRO
1
15
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
190
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
190
Visual Studio Code Dev Containers ススメ Python編 - NIFTY Tech Talk #17
niftycorp
PRO
1
140
dotfilesを作ろう - NIFTY Tech Talk #17
niftycorp
PRO
1
130
フロントエンドを始める前に どうしていっぱいツールがあるの? - NIFTY Tech Talk #17
niftycorp
PRO
1
240
サービスシステム監視 (シフト例)
niftycorp
PRO
0
94
スクラムマスターの技を磨く! ニフティのスクラムトーク vol. 1 - NIFTY Tech Talk #16
niftycorp
PRO
1
210
AWS基礎 / 2023 ニフティ新人研修
niftycorp
PRO
0
550
Other Decks in Programming
See All in Programming
AWS初心者ってどうやってAWSを学ぶ?〜アプリエンジニアがやってよかったアーキテクチャ学習方法〜
yamanashi_ren01
0
190
君たちはどうコードをレビューする (される) か / 大吉祥寺.pm
utgwkk
15
8.5k
今こそ始める、CDKコンストラクトライブラリ開発 ― 入門から実践まで
tmokmss
1
930
Folding Cheat Sheet #7
philipschwarz
PRO
0
150
Javaの現状2024夏 / Java current status 2024 summer
kishida
4
1.4k
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
Namespace on read
tagomoris
2
370
Rust.Nagoya #1
codemountains
0
170
Async Await: Mastering Python's Time-Bending Tricks - EuroPython2024
yanbo
1
290
最近追加した型の紹介とその振り返り
aki19035vc
0
170
feature環境をGitHub ActionsとCloudFormationでいい感じに管理する
nealle
2
310
Temporalを取り巻く仕様を整理する
sajikix
0
110
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
357
18k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
129
32k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
15
4.9k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
189
16k
The Invisible Side of Design
smashingmag
294
50k
YesSQL, Process and Tooling at Scale
rocio
166
14k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
44
4.7k
Large-scale JavaScript Application Architecture
addyosmani
506
110k
Building a Modern Day E-commerce SEO Strategy
aleyda
25
6.7k
The Mythical Team-Month
searls
217
43k
Designing for Performance
lara
604
67k
Transcript
Copyright © NIFTY Corporation All Rights Reserved. ニフティトップのNext.jsでの キャッシュ戦略を考えた話
佐々木 優 会員システムグループ
Copyright © NIFTY Corporation All Rights Reserved. 2 あらためて自己紹介
ニフティ株式会社 佐々木 優 • 新卒入社4年目 • @niftyトップページ開発/運用 • 自転車・国内旅行にハマり中
Copyright © NIFTY Corporation All Rights Reserved. キャッシュとは何か? 3
Copyright © NIFTY Corporation All Rights Reserved. キャッシュとは? •
一度利用したブラウザやサーバー側にあるデータを 一時的に保存する機能 キャッシュの種類 • ブラウザキャッシュ • CDNのキャッシュ など ※CDN = サーバーからの応答を 肩代わりするためのもの 4 キャッシュの概要
Copyright © NIFTY Corporation All Rights Reserved. 5 キャッシュの目的
コスト削減 • 画像などのコンテンツをキャッシュさせることで サーバー側へのリクエストにかかるコストを削減できる インフラリソースの負荷軽減 • ブラウザやCDNを用いることでサーバー側への負荷を肩代 わりできる パフォーマンス向上 • 銀の弾丸ではないがWebページのレスポンスタイムを減らす ことができる
Copyright © NIFTY Corporation All Rights Reserved. 6 キャッシュの目的
コスト削減 • 画像などのコンテンツをキャッシュさせることで サーバー側へのリクエストにかかるコストを削減できる インフラリソースの負荷軽減 • ブラウザやCDNを用いることでサーバー側への負荷を肩代 わりできる パフォーマンス向上 • 銀の弾丸ではないがWebページのレスポンスタイムを減らす ことができる
Copyright © NIFTY Corporation All Rights Reserved. @niftyトップページでも キャッシュ戦略を考えてみました!
7
Copyright © NIFTY Corporation All Rights Reserved. サイトの概要 •
ニフティの会員向けポータルサイト • 月間82万UU、1,989万PV!! ※2023/01実績 • 2022年7月にシステム基盤刷新を行った ◦ ReactベースのNext.js + Serverless Framework + CDN構成 詳細は 『NIFTY Tech Talk #4 レガシーシステムからの脱却』を ご参照ください! https://www.youtube.com/watch?v=Ttium-UNEEU 8 @niftyトップページについて
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 9 @niftyトップページキャッシュ構成
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイす るために使用) ブラウザキャッシュ • 基本はNext.jsで管理 10 @niftyトップページキャッシュ構成
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイす るために使用) ブラウザキャッシュ • 基本はNext.jsで管理 11 @niftyトップページキャッシュ構成 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 12 @niftyトップページキャッシュ構成 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. CDNのキャッシュ •
CloudFront • Serverless Framework(Next.jsをサーバレス環境へデプロイ するために使用) ブラウザキャッシュ • 基本はNext.jsで管理 13 @niftyトップページキャッシュ構成 よりユーザーに近い位置でのキャッシュ CDNへのリクエストも軽減できる 💪 ブラウザ→CloudFront へのリクエスト料金が発 生💰
Copyright © NIFTY Corporation All Rights Reserved. どうキャッシュさせるのが良いか?
14
Copyright © NIFTY Corporation All Rights Reserved. キャッシュするもの
• 画像やCSS、JSファイルなどあまり更新されない コンテンツはキャッシュさせる! • 特に画像はデータ転送量が大きいので効果大 • Next.jsでは静的コンテンツはデフォルトでキャッ シュされる設定になっている 15 キャッシュ戦略①
Copyright © NIFTY Corporation All Rights Reserved. キャッシュさせないもの
• APIなどユーザーによって返される内容が異 なるものはキャッシュさせない! • @niftyトップページにはログイン機能があり多 数の枠で利用している • 安全側に倒す方針を採用 16 キャッシュ戦略②
Copyright © NIFTY Corporation All Rights Reserved. 設定はなるべくシンプルに
• まずはシンプルに考える! • CDNとブラウザで同じキャッシュ設定に • できるだけユーザーに近い部分でキャッシュ させる 17 キャッシュ戦略③
Copyright © NIFTY Corporation All Rights Reserved. 無事リリース完了! 一見問題無さそうだが...
18
Copyright © NIFTY Corporation All Rights Reserved. next/imageの画像のブラウザキャッシュが短く設定されて いた
• next/image →Next.jsで画像を最適化してくれる技術 • 本来不要なリクエストが発生 →CloudFrontのコストも増加 • Severless Frameworkのデプロイ時に Next.jsのキャッシュ設定が上書きされててしまう 19 失敗談①
Copyright © NIFTY Corporation All Rights Reserved. 対処 •
Next.jsでブラウザキャッシュを効かせるためのルール を追加 next/imageのブラウザキャッシュを直接指定してみる 20 失敗談② async headers() { return [ { source: '/_next/image:slug*', headers: [ { key: 'Cache-Control', value: 'public, max-age=31536000, must-revalidate', }, ], }, } 例) next.config.js
Copyright © NIFTY Corporation All Rights Reserved. 結果 •
無事にnext/imageのブラウザキャッシュが効いた! • CloudFrontへのリクエストが減った! • 1000USD/月 程度のコストを削減できた! 21 どうなったのか?
Copyright © NIFTY Corporation All Rights Reserved. Good •
事前にキャッシュパターンを決めていた Bad • リリース後に正しくキャッシュが設定されているかの チェックが抜けていた • CloudFrontのコスト増加に気づけなかった Try • リリース後にはキャッシュ設定のチェックを行う • 普段からCost Explorerなどでコストを把握する癖をつける 振り返り① 22
Copyright © NIFTY Corporation All Rights Reserved. 振り返り② Learn
• 静的コンテンツはなるべくブラウザキャッシュさせる →更新頻度の低いコンテンツをまとめて管理できる設計 • キャッシュを常に把握できる状態にしておく →今の設定が本当に正しいのか?を検証可能に • 全てを一度に設定しようとしない →キャッシュなしの設定から徐々にキャッシュさせていく 23
Copyright © NIFTY Corporation All Rights Reserved. おわりに まとめ
• @niftyトップページでキャッシュ戦略考えた • キャッシュを正しく把握/設計することでインフラコストの削減に 繋がった • 失敗談から得た知見について 24
Copyright © NIFTY Corporation All Rights Reserved.