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
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
790
リモートワーク×副業 が中心のチームづくり
takahi5
0
1.4k
React Native + Expoなアプリを リリースして1年を”5分”で振り返る
takahi5
1
330
Other Decks in Technology
See All in Technology
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
200
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
410
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
200
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1.3k
FDEの心得
noriakioji
4
5.9k
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.3k
Flutterをカメラで動かしたかった話
sony
1
140
Model Studio CLI × Token Plan
maigo999
0
180
Genie Codeハンズオン基礎編
taka_aki
1
120
猫付きpingコマンドを自作
uyuki234
0
240
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
ボトムアップ文化が強い組織で セキュリティをどう根付かせていくかの現在進行形の話 / Making Security Stick in a Bottom-Up Organization
yamaguchitk333
0
220
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
210
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
280
Agile that works and the tools we love
rasmusluckow
331
22k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Embracing the Ebb and Flow
colly
88
5.1k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
430
What's in a price? How to price your products and services
michaelherold
247
13k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
540
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)プロフ欄にクーポンあります!