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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
takahi5
October 15, 2020
Technology
1
100
React Native パフォーマンス最適化 - 2020-10-15 RN Tech Blog
takahi5
October 15, 2020
Tweet
Share
More Decks by takahi5
See All by takahi5
仮説検証フェーズの開発 with React Native
takahi5
0
140
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.1k
リリースから1年経った React Nativeアプリの リファクタリング
takahi5
0
750
リモートワーク×副業 が中心のチームづくり
takahi5
0
1.4k
React Native + Expoなアプリを リリースして1年を”5分”で振り返る
takahi5
1
320
Other Decks in Technology
See All in Technology
Scrumは歪む — 組織設計の原理原則
dashi
0
190
アーキテクチャモダナイゼーションを実現する組織
satohjohn
2
940
Sansanでの認証基盤内製化と移行
sansantech
PRO
0
490
銀行の内製開発にて2つのプロダクトを1つのチームでスクラムしてみてる話
koba1210
1
130
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
3k
Abuse report だけじゃない。AWS から緊急連絡が来る状況とは?昨今の攻撃や被害の事例の紹介と備えておきたい考え方について
kazzpapa3
1
760
It’s “Time” to use Temporal
sajikix
2
160
AIエージェント、 社内展開の前に知っておきたいこと
oracle4engineer
PRO
2
140
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
190
Dr. Werner Vogelsの14年のキーノートから紐解くエンジニアリング組織への処方箋@JAWS DAYS 2026
p0n
1
140
わからなくて良いなら、わからなきゃだめなの?
kotaoue
1
360
楽しく学ぼう!ネットワーク入門
shotashiratori
1
390
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
GraphQLとの向き合い方2022年版
quramy
50
14k
How to Ace a Technical Interview
jacobian
281
24k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
220
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
140
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
260
The Language of Interfaces
destraynor
162
26k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
180
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
290
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)プロフ欄にクーポンあります!