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
React Native パフォーマンス最適化 - 2020-10-15 RN Tech Blog
Search
takahi5
October 15, 2020
Technology
110
1
Share
React Native パフォーマンス最適化 - 2020-10-15 RN Tech Blog
takahi5
October 15, 2020
More Decks by takahi5
See All by takahi5
仮説検証フェーズの開発 with React Native
takahi5
0
150
React Nativeでアニメーションを頑張る- React Native Meetup #11
takahi5
4
1.6k
React Native x Firebaseの メリットとTips5選
takahi5
1
2.2k
怖くないexpo eject - TECH STAND #2
takahi5
0
2.2k
リリースから1年経った React Nativeアプリの リファクタリング
takahi5
0
780
リモートワーク×副業 が中心のチームづくり
takahi5
0
1.4k
React Native + Expoなアプリを リリースして1年を”5分”で振り返る
takahi5
1
330
Other Decks in Technology
See All in Technology
ITエンジニアを取り巻く環境とキャリアパス / A career path for Japanese IT engineers
takatama
4
1.8k
layerx-fde-practices
cipepser
6
2.9k
Ruby::Boxでできること、Refinementsでできること
joker1007
2
110
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
0
160
Sony_KMP_Journey_KotlinConf2026
sony
1
180
権限管理設計を完全に理解した
rsugi
2
250
NFLコンペ2026 解法
lycorptech_jp
PRO
0
130
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
1
520
APIテストとは?
nagix
0
160
大規模災害時でも高い信頼性を維持するアプリケーション基盤の実現/nikkei-tech-talk46
nikkei_engineer_recruiting
0
120
AIガバナンス実践 - 生成AIコネクタのデータ漏洩リスクと実務対策
knishioka
0
150
Unlocking the Apps
pimterry
0
140
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1370
210k
Rails Girls Zürich Keynote
gr2m
96
14k
Music & Morning Musume
bryan
47
7.2k
Docker and Python
trallard
47
3.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
420
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
220
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
190
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
Transcript
React Native パフォーマンス 最適化 ワダタカヒコ @takahi5
和田崇彦(ワダタカヒコ) @takahi5 • DeNA > マリクル > 独立 • React
Nativeでアプリ開発 • React NativeのUdemyコース を作ったり
スポーツ観戦を楽しくするアプリ • リアルタイム実況 • 応援 • ギフティング SpoLive
今日話すこと パフォーマンス最適化
起動に時間がか かる スクロールが カクカクする APIで情報取得 するのに 時間がかかる ボタンタップの 反応が悪い パフォーマンス最適化
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 パフォーマンス最適化
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他
メインスレッドとJSスレッド Main (Native) Thread JavaScript Thread Bridge UI ビジネス ロジック
JS側が忙しくなりがち メインでできることはメインに Main (Native) Thread JavaScript Thread Bridge UI ビジネス
ロジック
useNativeDriver Animatedでアニメーションしている場合 useNativeDriverオプションをtrueに
useNativeDriver メイン (Native) JavaScript Bridge +1px +2px +3px +4px メイン
(Native) JavaScript Bridge 1秒間で +10px動かして OK 1秒間で+10pxだから... 次のフレームは〜 useNativeDriver = false useNativeDriver = true
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 レンダリング回数を減らす
レンダリング回数 = stateの更新回数 × (更新対象の)コンポーネント数
実験: 親のstateが更新されるとどうなるのか? App state.count LargeItem MiddleItem SmallItem 関係ないstateの countを更新してみる
結果: 全ての子が再レンダリング App state.count LargeItem MiddleItem SmallItem 更新 render render
render
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 stateの更新を減らす
stateの更新を減らす① 画面描画と関係ない変数はuseRefを利用
stateの更新を減らす② そもそもの更新回数を減らす
stateの更新回数を減らす - SpoLive事例 ⚽ ⚽ state更新 state更新 state更新 state更新 state更新
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 更新対象のコンポーネントを減らす
memo化 (or PureComponent) propsに変化(*)がない場合は再レンダリングしない *浅い比較
memo化(or PureComponent) で FlatListを最適化してみよう
実験: FlatList ※FlastList自体は PureComponent
結果: FlatList render render render count 更新
便利ツール: why-did-you-renderでチェック! renderItemが同じ名前だけど 別オブジェクトって判定されてるよ 原因: アロー関数が都度生成されている
useCallback で関数の再生成を防ぐ
さらに... FlatListの子コンポーネントもmemo化しよう 子コンポーネントも memo化しておく
SpoLive事例: memo化 Before After memo化 FlatList全体で 71.5ms → 1.7ms react-devtoolsにて計測
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 その他(罠?)
Stackされた裏の画面が更新 フィード フォロー 更新
FireStoreの通信処理自体が負荷に onSnapShot onSnapShot onSnapShot onSnapShot onSnapShot
メインスレッド JSスレッド レンダリング state更新 更新対象の コンポーネント その他 ・useNativeDriver ・useRef ・そもそも更新減らす
・memo化 ・裏の画面 ・通信など まとめ
最後に • パフォーマンスが気になったらやりましょう • 初めから最適化する必要はない • まず計測から
PR スポーツファン(サッカー,ラグビーなど) の方、是非お試しを! エンジニアも募集中です! Udemyの React Native + Firebaseコース twitter(@takahi5)プロフ欄にクーポンあります!