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
600
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
Transcript
27 slides
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との併用が好ましい。 - ファイル分割によってレイテンシーが増えるのでチューニングと再利用性のバラン スを取るのは重要 -
速さは正義!!!!
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
83
今日から始めるgithub actions
remrem0090
0
66
Reactでのマルチストア運用を考察する
remrem0090
0
250
effectorを使い倒してReduxのかわりになるか検証する
remrem0090
1
840
Other Decks in Programming
See All in Programming
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
GraphQL の onError と Nullability のこれから
quramy
0
220
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
260
小さなアプリを作って公開するまで
onozaty
0
170
AI時代のIaC入門 〜なぜインフラをコードで管理したいのか?〜 / Introduction to IaC in the AI Era
akihisaikeda
6
1.5k
Crash Auto Pipelines
veronikapj
1
410
Spec-driven Development with AI
simas
PRO
0
2.3k
느린 네트워크와 저사양 디바이스 사용자를 위한 웹뷰 로딩 시간 개선기
kmkim
1
240
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.7k
どうしても Eloquent でリポジトリパターンをやりたいんだ #phpcon_niigata / phpcon-niigata-2026
shogogg
0
150
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
210
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6.4k
First, design no harm
axbom
PRO
2
1.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7.1k
RailsConf 2023
tenderlove
30
1.6k
The browser strikes back
jonoalderson
0
1.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
630
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
エンジニアに許された特別な時間の終わり
watany
109
250k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k