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
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
140
今日から始めるWeb Components
remrem0090
0
110
Reactで始めるsencer入門
remrem0090
0
75
今日から始めるgithub actions
remrem0090
0
62
Reactでのマルチストア運用を考察する
remrem0090
0
240
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
830
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
280
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
100
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
180
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
17
15k
すこし踏み込む CancellationToken
htkym
2
960
AWSに止められる覚悟してますか?
morizo_1984
0
150
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
130
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.2k
アクセシビリティから考える情報設計
high_g_engineer
0
390
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
160
JRuby: Past, Present, and Future
headius
0
190
Are APIs Still Relevant in the AI Era?
soyuka
0
310
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
340
58k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
710
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Code Reviewing Like a Champion
maltzj
528
40k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Curse of the Amulet
leimatthew05
3
15k
A designer walks into a library…
pauljervisheath
211
25k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
330
Docker and Python
trallard
47
4.2k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
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との併用が好ましい。 - ファイル分割によってレイテンシーが増えるのでチューニングと再利用性のバラン スを取るのは重要 -
速さは正義!!!!