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
ピクシブ百科事典のWebフロントエンドパフォーマンス改善
Search
higara
October 16, 2024
Programming
0
1k
ピクシブ百科事典のWebフロントエンドパフォーマンス改善
https://conference.pixiv.co.jp/2024/dev-meetup
LT発表資料
higara
October 16, 2024
Tweet
Share
Other Decks in Programming
See All in Programming
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
Nuances on Kubernetes - RubyConf Taiwan 2025
envek
0
190
コーディングエージェント時代のNeovim
key60228
1
100
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
210
CEDEC 2025 『ゲームにおけるリアルタイム通信への QUIC導入事例の紹介』
segadevtech
3
970
TROCCO×dbtで実現する人にもAIにもやさしいデータ基盤
nealle
0
330
兎に角、コードレビュー
mitohato14
0
150
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
140
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
150
MLH State of the League: 2026 Season
theycallmeswift
0
160
モバイルアプリからWebへの横展開を加速した話_Claude_Code_実践術.pdf
kazuyasakamoto
0
260
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
650
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Art of Programming - Codeland 2020
erikaheidi
55
13k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
How to Ace a Technical Interview
jacobian
279
23k
How STYLIGHT went responsive
nonsquared
100
5.7k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Why Our Code Smells
bkeepers
PRO
338
57k
Agile that works and the tools we love
rasmusluckow
329
21k
Making Projects Easy
brettharned
117
6.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Site-Speed That Sticks
csswizardry
10
780
Transcript
ピクシブ百科事典の Webフロントエンド パフォーマンス改善 higara
• 2024年新卒入社 • フロントエンドエンジニア • イラストが好きです → • 今日はOJT期間中の ピクシブ百科事典の話をします higara
ピクシブ百科事典はアニメからマンガ、 ゲーム、デザイン、アートまで、 あらゆる言葉・現象・文化・作品を解説する 「みんなでつくる百科事典」です。
• ピクシブ百科事典はPHP製 • ページのレンダリングはSmarty (テンプレートエンジン) • フロントエンドはNext.jsへの置き換えが進行中 ◦ 記事ページのパフォーマンスが問題に 百科事典の技術構成・課題
新記事ページで 記事が表示されるまで
記事本文の 文字列 記事本文は 独自記法で記述される
記事本文の文字 列データ 記事構造ツリー を表すJSON 記事本文の パース
記事本文の文字 列データ 記事構造ツリー を表すJSON 記事本文のパース JSONをHTMLに レンダリング レンダリング された記事 ServerSide
Props
記事本文の文字 列データ 記事構造ツリー を表すJSON 記事本文のパース JSONをHTMLに レンダリング レンダリング された記事 ServerSideProps
Hydration
記事本文の文字 列データ 記事構造ツリー を表すJSON 記事本文のパース JSONをHTMLに レンダリング レンダリング された記事 ServerSideProps
Hydration
• 本文はとても長くなる可能性がある • 記事が長くなるとやりとりするデータも大きくなる
記事本文の文字 列データ 記事構造ツリー を表すJSON 記事本文のパース JSONをHTMLに レンダリング レンダリング された記事 ServerSideProps
Hydration 怪しい!!
怪しいところは いろいろあるが
データ計測 フィールド値の計測にSentry、手元での計測にLighthouseを使用
• 仮説 • 手元で検証 • 本番で効果を確認 小さく回せるフローができた
• 百科事典はUGC ◦ 記事によってページの特徴が異なる • ページによってアクセス傾向も異なる • できる限りインパクトの大きい、ユーザーにとって嬉し いところから改善したい 数値から得られた知見
実際に取り組んだ改善
Tailwindへの置き換え
• ピクシブにはデザインシステムがある • Charcoalのstyledの仕組みに既知の問題があった • 広範囲で使われているが、全てのスタイル置き換えはつらい Tailwindへの置き換え
• ピクシブにはデザインシステムがある • Charcoalのstyledの仕組みに既知の問題があった • 広範囲で使われているが、全てのスタイル置き換えはつらい Tailwindへの置き換え
コードに占める割合が小さくてもページに占める割合が大きい コード 描画結果 記事本文 その他 記事本文 その他 記事ページの事情
記事本文での改善を確認後、他の箇所も置き換え
速くなった! 記事本文のtailwind化 追加の置き換え
Tailwind と styled-components • Tailwind はビルド時にCSSを生成・静的 • styled-components はランタイムでスタイルを生成 ◦
おそらく通常はそこまで重いものではない ◦ デザインガイドラインに沿ってstyled-componentsを 記述する仕組みが特別重かった
• 記事jsonのminify • UAを使って記事を出し分けてDOM数を減らす • 記事本文だけ事前レンダリングして保存したい 検証して却下したもの・実施前のもの アイデアで止まったもの
• Sentryによるフィールド値の計測 • Lighthouseによる手元での簡易的計測 • 手元で効果検証→本番投入のサイクル まとめ • Tailwindによるスタイルの置き換え •
なるべく小さい変更で済むところで確かめる