Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
bundleサイズ2MBの社内サイト 大改修譚 俺の話を聞け!!LT大会 #13
Slide 2
Slide 2 text
No content
Slide 3
Slide 3 text
社内にReact用のドキュメントサイトがあり React, Reduxのチュートリアルと リファレンスをまとめています ろくにメンテナンスされてないので リプレースを決行
Slide 4
Slide 4 text
今日話すこと ・内部アーキテクトの改善 ・パフォーマンス改善
Slide 5
Slide 5 text
内部アーキテクトの改善 - TypeScript移行 - CSSModulesをstyled-componentsに置き換え - ReduxとReact Hooksとの付き合い方 - Component構成の見直し
Slide 6
Slide 6 text
内部アーキテクトの改善 - TypeScript移行 - CSSModulesをstyled-componentsに置き換え - ReduxとReact Hooksとの付き合い方 - Component構成の見直し
Slide 7
Slide 7 text
元々ReactのClass Componentで 状態を全て管理していた ロジックはutilやlibなどに散乱...
Slide 8
Slide 8 text
ロジックと状態を全てReduxに退避!
Slide 9
Slide 9 text
ところが...
Slide 10
Slide 10 text
React Hooksが発表
Slide 11
Slide 11 text
アプリの設計を考え直すことにした
Slide 12
Slide 12 text
状態管理の責務を分別 Redux React - APIを叩いたレスポンスデータ - DOMの情報 - UIの状態 - 動的に読み込まれるComponent fetch, axiosで取得した未加工データ refを使って取得した要素の高さ等 入力されたテキスト値や セレクトボックスの状態等 dynamic importで取得したComponent history情報や 通信失敗、認証エラー起こしたのか等 - アプリケーションの状態
Slide 13
Slide 13 text
useMemoの活用 レスポンスデータに対して整形処理や演算を施して Componentに渡すことがよくある ReduxのStoreとreselectを併用していたが useMemoに一任した ReduxのStore reselect => useMemo
Slide 14
Slide 14 text
パフォーマンス改善 - webpackのsplitChunk - React.lazyとSuspenseによるdynamic import - highlight.jsの最適化 - preload, prefetchでデータ先読み
Slide 15
Slide 15 text
パフォーマンス改善 - webpackのsplitChunk - React.lazyとSuspenseによるdynamic import - highlight.jsの最適化 - preload, prefetchでデータ先読み
Slide 16
Slide 16 text
React.lazyとSuspenseによるdynamic import 自社でUIライブラリーを作っており そのリファレンスを掲載している ドキュメントとは別にサンプルコンポーネントを 読み込んでおり、サンプルコンポーネントを全て dynamic importで取得するようにした
Slide 17
Slide 17 text
No content
Slide 18
Slide 18 text
import文にコメントを書くことで build/componentSample配下に サンプルコンポーネントが出力される importされるまでは Loading...と画面に表示される
Slide 19
Slide 19 text
highlight.jsの最適化 - 普通にimportすると全ての言語が読み込まれてしまう - 必要な言語のみ適用するようにする 700KB こうするだけでファイルサイズは約 小さくなる
Slide 20
Slide 20 text
大格闘の末・・・
Slide 21
Slide 21 text
メインのbundle.jsは107KBまで軽量化!
Slide 22
Slide 22 text
まとめ(改修してどうなったか) - コードの見通しは圧倒的によくなった - 責務の分離によりテストも作りやすくなった - First Contentful Paintが約1~1.5秒改善 - コードの美しさに見惚れるようになった(←まじ大事 でもパフォーマンス面はまだまだ改善の余地が
Slide 23
Slide 23 text
ご静聴ありがとうございました!