Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
React code Splitting
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hayashi Takao
May 27, 2019
Programming
590
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React code Splitting
React code Splittingについてのきほんとその効果
Hayashi Takao
May 27, 2019
More Decks by Hayashi Takao
See All by Hayashi Takao
React 19×Rustツール 進化の「ズレ」を設計で埋める
remrem0090
1
150
今日から始めるWeb Components
remrem0090
0
110
Reactで始めるsencer入門
remrem0090
0
77
今日から始めるgithub actions
remrem0090
0
64
Reactでのマルチストア運用を考察する
remrem0090
0
240
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
830
Other Decks in Programming
See All in Programming
phperだってパンチカードでコーディングしたい
o0h
PRO
0
370
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
130
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
0
150
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Simple Storage Service(S3) is not simple
iwatsukayura
0
310
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
3
1.4k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
360
sbt 2.0: takeoff
eed3si9n
0
170
Workers Cache を知る
syumai
0
370
golang-bob.pdf
iwatsukayura
0
130
AWSに止められる覚悟してますか?
morizo_1984
2
540
Featured
See All Featured
How GitHub (no longer) Works
holman
316
150k
Deep Space Network (abreviated)
tonyrice
0
380
We Have a Design System, Now What?
morganepeng
55
8.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
530
Building AI with AI
inesmontani
PRO
1
1.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
GraphQLとの向き合い方2022年版
quramy
50
15k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
640
Typedesign – Prime Four
hannesfritz
42
3.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
280
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Transcript
Reactパフォーマンス改善 Takao hayashi
自己紹介 株式会社サイバー・バズ 林 恭央 twitter / @almomdchocolate github / takao-h インフルエンサーマーケティングの会社でReactとScalaを書いている人です。
絶賛採用中なのできになる方は声かけてくださいw
Time Line - react のパフォーマンスを改善したい! - 手段の選定 - code splittingの基本
- NINARYの採用事例 - まとめ
【問題】 Reactの初期レンダリングが重い。 パフォーマンスの低下によりUXも低下。 Reactのパフォーマンスを改善したい!
【原因】 初期レンダリングで読み込まれるソースが多い。 Reactのパフォーマンスを改善したい!
具体的にどういうこと?
None
Reactで開発を進めて行くと - 可読性 - 再利用性 の観点からコードを分割し開発が進む。(モジュール化) また、個々のモジュールが必要に応じてAPIとの通信をしており 初期レンダリングでページに表示される全てを読み込むと 同時多発的に通信とレンダリングが行われ モジュール全てが値を返し切らないと表示がされない。
なぜ初期の読み込みが多くなってしまう?
- 可読性 - 再利用性 を損なわずに、コードの変更量は少なく かつ効率良いリソースの読み込みがしたい!!! 解決策として期待するもの
Reactのパフォーマンスを改善したい! - 1 【解決策】 パフォーマンスを改善する!! パフォーマンス改善の方法は色々ある - SSR - lazy
load - code splitting etc...
Reactのパフォーマンスを改善したい! - 2 解決手段は色々とあるが、本質的には - ソースの読み込み量を減らし - 必要なリソースを適宜取得する この2つを満たすことが理想。
SSR (Server Side Rendering) サーバーで初期のHTMLを組み立 てておき、routeで定義されたパス にアクセスしたとき初期 HTMLを返 却し、そのあとバンドルした JSを読
み込ませる。 Nuxt.js、Next.jsで標準実装されて おり表示速度を改善できる。 SEOに対して強い lazy load データを遅延して読み込む 画像などを多用する場合に効果が 高い。 表示されていないデータやソース を遅延して読み込むことでパフォー マンスを改善する code splitting routeごとにJSのファイルを分割し バンドルファイルの初期ロードを小 さくすることで表示までの時間を短 縮できる。 今回はこれのお話
React code splittingとは? コードを分割すること。分割されたコードはアクションに応じて非同期で読み込まれる。 SPAでも効果あり。 images from: Qiita
ちなみに。。。 SSRしたらcode splittingがいらないかといえばそんなことはない。 (バンドルサイズを下げられるわけではないため) また、code splittingしたらSSRがいらないかといえばそんなこともない。 (HTMLをサーバーでビルドしてるわけではないため) 併用することで最大のパフォーマンスが出せるので、 ユーザー画面では積極的に併用して速さを追求したい。
code splittingの基本パターン 1. page 2. Fold 3. Temporal
1. page ページごとに分割をしてルートの変換が行われたときに読み込まれるようにする考え 方。routes.jsでおこなわれる。
2. Fold Fold(初期表示領域)を優先的に読みこみ後ろに追随するコンテンツを 非同期で読み込む考え方。 コンテンツの特徴によってはただただトリッキーな実装になったり code splittingをしたときのwrapコンポーネントが必要だったりする。
3. Temporal モーダルとかツールチップのような最初に表示されないUI要素を トリガーがとなる要素が現れたとき初めて読み込みにいくようにする考え方。
NINARYではこんな風に
動的にインポートを行う。 routes.ts React.lazy
suspense / fallback suspense 要素が読み込まれるまでの間に ロード画面を出したり別要素を出せる fallback コンポーネントのロードを待っている間に レンダリングしたいReact要素を全て受け入れる。 suspenseでラップできる。
None
NINARYでの効果 dev環境でファイルサイズが半分に prod環境でさらに半分近くに! 効果えぐいです。 ただwebpackの設定の調整は重要!! バンドルされるファイルにハッシュを入れたりバンドルファイルが読まれる順序を設定 側でいじくってやる必要はある。
prefetch / preload prefetch chunkしたモジュールを事前に読み込むことが可能 importの関数内でコメントをつけとくだけでいい。 順番をつけたい時は`true`の部分に数字を入れる。 preload こちらもコメントをつける。 `
/* webpackPreload: true*/ ` prefetchとの違いは prefetch => ナビゲーションの前に動作 preload => ナビゲーション後に動作 https://blog.jxck.io/entries/2016-03-04/preload.html
webpackの話 webpackの設定から1.bundle.jsと表示されるのをいじる 名前をつけてあげることで読み込みの順番などをデバッグできる。 またchunkの設定を書き直すことでエントリーポイントの
こんなcode splittingのためのライブラリも https://github.com/smooth-code/loadable-components
まとめ - code splittingによってバンドルサイズを減らしレンダリングを改善できる! - ユーザー向けの画面ならばSSRとの併用が好ましい。 - ファイル分割によってレイテンシーが増えるのでチューニングと再利用性のバラン スを取るのは重要 -
速さは正義!!!!