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
0
260
bundleサイズ2MBの社内サイト大改修譚.pdf
俺の話を聞け!!LT大会 #13の登壇資料です。
camcam_lemon
April 25, 2019
Tweet
Share
More Decks by camcam_lemon
See All by camcam_lemon
オレを実装してデザイン実装楽したい
lemon
0
59
要素のサイズを変えずに押しやすくする
lemon
0
78
iOSのキーボード入力ビューをカスタマイズする
lemon
0
260
視え方と文字の大きさ
lemon
1
420
Yarn WorkSpaces × React Nativeの環境構築
lemon
0
300
フロントエンドにおけるアーキテクチャとの向き合い方
lemon
10
5k
UI/UXデザイナーがデザインしてるもの
lemon
2
330
react-reduxで追加されたHooks APIの良い所と使い方
lemon
5
1k
ESLintで始めるTypeScriptの静的解析
lemon
8
2.1k
Other Decks in Programming
See All in Programming
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
0
480
Web エンジニアが JavaScript で AI Agent を作る / JSConf JP 2025 sponsor session
izumin5210
4
2k
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
300
チーム開発の “地ならし"
konifar
8
5.9k
CSC509 Lecture 11
javiergs
PRO
0
310
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
1.9k
r2-image-worker
yusukebe
1
180
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
0
130
DartASTとその活用
sotaatos
2
150
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
750
All(?) About Point Sets
hole
0
210
「AWS CDK入門」の前日譚/Prequelto-Introduction-To-AWSCDK
tyumugi1113
0
100
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Building Adaptive Systems
keathley
44
2.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
Measuring & Analyzing Core Web Vitals
bluesmoon
9
680
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Building an army of robots
kneath
306
46k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
RailsConf 2023
tenderlove
30
1.3k
It's Worth the Effort
3n
187
29k
Bash Introduction
62gerente
615
210k
Building Applications with DynamoDB
mza
96
6.8k
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秒改善 -
コードの美しさに見惚れるようになった(←まじ大事 でもパフォーマンス面はまだまだ改善の余地が
ご静聴ありがとうございました!