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
bundleサイズ2MBの社内サイト大改修譚.pdf
Search
camcam_lemon
April 25, 2019
Programming
260
0
Share
bundleサイズ2MBの社内サイト大改修譚.pdf
俺の話を聞け!!LT大会 #13の登壇資料です。
camcam_lemon
April 25, 2019
More Decks by camcam_lemon
See All by camcam_lemon
オレを実装してデザイン実装楽したい
lemon
0
77
要素のサイズを変えずに押しやすくする
lemon
0
90
iOSのキーボード入力ビューをカスタマイズする
lemon
0
310
視え方と文字の大きさ
lemon
1
450
Yarn WorkSpaces × React Nativeの環境構築
lemon
0
320
フロントエンドにおけるアーキテクチャとの向き合い方
lemon
10
5k
UI/UXデザイナーがデザインしてるもの
lemon
2
340
react-reduxで追加されたHooks APIの良い所と使い方
lemon
5
1k
ESLintで始めるTypeScriptの静的解析
lemon
8
2.2k
Other Decks in Programming
See All in Programming
AI時代のPhpStorm最新事情 #phpcon_odawara
yusuke
0
210
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
210
Angular Signal Forms
debug_mode
0
120
Kingdom of the Machine
yui_knk
2
940
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
3
810
t *testing.T は どこからやってくるの?
otakakot
1
710
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
160
書籍「ユーザーストーリーマッピング」が私のバイブル
asumikam
4
420
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
290
Swift Concurrency Type System
inamiy
1
550
mruby on C#: From VM Implementation to Game Scripting (RubyKaigi 2026)
hadashia
2
680
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
Featured
See All Featured
A Soul's Torment
seathinner
6
2.7k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
280
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1k
First, design no harm
axbom
PRO
2
1.2k
Accessibility Awareness
sabderemane
1
110
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
Test your architecture with Archunit
thirion
1
2.2k
Side Projects
sachag
455
43k
Abbi's Birthday
coloredviolet
2
7.3k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
170
Joys of Absence: A Defence of Solitary Play
codingconduct
1
350
The Mindset for Success: Future Career Progression
greggifford
PRO
0
310
Transcript
bundleサイズ2MBの社内サイト 大改修譚 俺の話を聞け!!LT大会 #13
None
社内にReact用のドキュメントサイトがあり React, Reduxのチュートリアルと リファレンスをまとめています ろくにメンテナンスされてないので リプレースを決行
今日話すこと ・内部アーキテクトの改善 ・パフォーマンス改善
内部アーキテクトの改善 - TypeScript移行 - CSSModulesをstyled-componentsに置き換え - ReduxとReact Hooksとの付き合い方 - Component構成の見直し
内部アーキテクトの改善 - TypeScript移行 - CSSModulesをstyled-componentsに置き換え - ReduxとReact Hooksとの付き合い方 - Component構成の見直し
元々ReactのClass Componentで 状態を全て管理していた ロジックはutilやlibなどに散乱...
ロジックと状態を全てReduxに退避!
ところが...
React Hooksが発表
アプリの設計を考え直すことにした
状態管理の責務を分別 Redux React - APIを叩いたレスポンスデータ - DOMの情報 - UIの状態 -
動的に読み込まれるComponent fetch, axiosで取得した未加工データ refを使って取得した要素の高さ等 入力されたテキスト値や セレクトボックスの状態等 dynamic importで取得したComponent history情報や 通信失敗、認証エラー起こしたのか等 - アプリケーションの状態
useMemoの活用 レスポンスデータに対して整形処理や演算を施して Componentに渡すことがよくある ReduxのStoreとreselectを併用していたが useMemoに一任した ReduxのStore reselect => useMemo
パフォーマンス改善 - webpackのsplitChunk - React.lazyとSuspenseによるdynamic import - highlight.jsの最適化 - preload,
prefetchでデータ先読み
パフォーマンス改善 - webpackのsplitChunk - React.lazyとSuspenseによるdynamic import - highlight.jsの最適化 - preload,
prefetchでデータ先読み
React.lazyとSuspenseによるdynamic import 自社でUIライブラリーを作っており そのリファレンスを掲載している ドキュメントとは別にサンプルコンポーネントを 読み込んでおり、サンプルコンポーネントを全て dynamic importで取得するようにした
None
import文にコメントを書くことで build/componentSample配下に サンプルコンポーネントが出力される importされるまでは Loading...と画面に表示される
highlight.jsの最適化 - 普通にimportすると全ての言語が読み込まれてしまう - 必要な言語のみ適用するようにする 700KB こうするだけでファイルサイズは約 小さくなる
大格闘の末・・・
メインのbundle.jsは107KBまで軽量化!
まとめ(改修してどうなったか) - コードの見通しは圧倒的によくなった - 責務の分離によりテストも作りやすくなった - First Contentful Paintが約1~1.5秒改善 -
コードの美しさに見惚れるようになった(←まじ大事 でもパフォーマンス面はまだまだ改善の余地が
ご静聴ありがとうございました!