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
250
bundleサイズ2MBの社内サイト大改修譚.pdf
俺の話を聞け!!LT大会 #13の登壇資料です。
camcam_lemon
April 25, 2019
Tweet
Share
More Decks by camcam_lemon
See All by camcam_lemon
要素のサイズを変えずに押しやすくする
lemon
0
54
iOSのキーボード入力ビューをカスタマイズする
lemon
0
220
視え方と文字の大きさ
lemon
1
380
Yarn WorkSpaces × React Nativeの環境構築
lemon
0
270
フロントエンドにおけるアーキテクチャとの向き合い方
lemon
10
4.9k
UI/UXデザイナーがデザインしてるもの
lemon
2
320
react-reduxで追加されたHooks APIの良い所と使い方
lemon
5
970
ESLintで始めるTypeScriptの静的解析
lemon
8
2.1k
SEがエンジニアに目覚めデザイナーに転身した冒険譚
lemon
6
1.5k
Other Decks in Programming
See All in Programming
Lambda(Python)の リファクタリングが好きなんです
komakichi
5
270
カウシェで Four Keys の改善を試みた理由
ike002jp
1
130
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
180
ニーリーQAのこれまでとこれから
nealle
2
770
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
160
Rubyの!メソッドをちゃんと理解する
alstrocrack
1
280
The Missing Link in Angular’s Signal Story: Resource API and httpResource
manfredsteyer
PRO
0
140
はじめてのPDFKit.pdf
shomakato
0
100
eBPF超入門「o11yに使える」とは (20250424_eBPF_o11y)
thousanda
1
120
2025年のz-index設計を考える
tak_dcxi
10
3.8k
「理解」を重視したAI活用開発
fast_doctor
0
300
最速Green Tea 🍵 Garbage Collector
kuro_kurorrr
1
110
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
233
140k
Build your cross-platform service in a week with App Engine
jlugia
230
18k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
179
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
33k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Statistics for Hackers
jakevdp
799
220k
GraphQLとの向き合い方2022年版
quramy
46
14k
BBQ
matthewcrist
88
9.6k
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秒改善 -
コードの美しさに見惚れるようになった(←まじ大事 でもパフォーマンス面はまだまだ改善の余地が
ご静聴ありがとうございました!