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
【詳解】Compose Strong Skipping Mode
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Yusuke Suzuki
July 12, 2024
Technology
490
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【詳解】Compose Strong Skipping Mode
I provided a detailed explanation of Strong skipping mode.
Yusuke Suzuki
July 12, 2024
More Decks by Yusuke Suzuki
See All by Yusuke Suzuki
Android Vitalsのデータを自動監視して、 ビジネス指標を向上させよう/ Automatically monitor Android Vitals data to improve business metrics.
yusukesuzuki1213
0
6.4k
Android Lintでコードの宣言順をチェッ クする / check-declaration-order-with-android-custom-lint
yusukesuzuki1213
0
2k
Other Decks in Technology
See All in Technology
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
4k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
2.8k
Mastraエージェント、どのクラウドにデプロイする?
minorun365
PRO
2
170
Kotlin 開発のツラミを爆破した話! / Explode the difficulty of Kotlin dev!
eller86
0
150
Why is RC4 still being used?
tamaiyutaro
0
310
依頼文化をやめる日 EM視点で語るPlatform EngineeringとInclusive SRE / Discussing Platform Engineering and Inclusive SRE from an EM's Perspective
shin1988
4
4.5k
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
330
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
2k
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
300
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
1
220
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
140
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
2.9k
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Believing is Seeing
oripsolob
1
170
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Paper Plane
katiecoart
PRO
1
52k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Rails Girls Zürich Keynote
gr2m
96
14k
How GitHub (no longer) Works
holman
316
150k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Transcript
【詳解】Compose Strong Skipping Mode DroidKaigi.collect { #10@Nagoya } DroidKaigi.collect {
#10@Nagoya } Yusuke Suzuki 2024/07/13
Yusuke Suzuki 2016/04 静岡大学情報学部 入学 2020/03 株式会社ZOZOテクノロジーズ 入社 2021/10 株式会社ZOZO
入社 2023/09 フリーランス ・Androidアプリエンジニア ・メンター (エンジニア教育サービス )
Strong Skipping Modeとは?
Strong Skipping Mode Jetpack ComposeのRecompositionを減らし、パフォーマンスを向上させるための Compose compilerの機能 特徴 1. unstableなパラメータをスキップ可能にする
2. unstableなキャプチャを持つラムダをrememberする
😇 ?
前提知識
Recomposition Composable関数の入力が変更されたときComposable関数を再実行(=Recompose) してCompositionを更新すること[1] Column Item1 Item2 Item3 Column Item1 Item2
Item3 Item1を更新 Recompose Recompose Skip Skip [1] https://developer.android.com/develop/ui/compose/mental-model
以下の条件を満たしたComposable関数はRecompositionをスキップできる[2] 1. Composable関数のパラメータに変更がない 2. Composable関数のパラメータがstableである Recompositionのスキップ [2] 「Stability in Compose」https://developer.android.com/develop/ui/compose/performance/stability
以下の条件を満たしたComposable関数はRecompositionをスキップできる[2] 1. Composable関数のパラメータに変更がない 2. Composable関数のパラメータがstableである Recompositionのスキップ [2] 「Stability in Compose」https://developer.android.com/develop/ui/compose/performance/stability
条件①: Composable関数のパラメータに変更がない 変更の有無はStructural equality(==)を用いて判断する
以下の条件を満たしたComposable関数はRecompositionをスキップできる[2] 1. Composable関数のパラメータに変更がない 2. Composable関数のパラメータが stableである Recompositionのスキップ [2] 「Stability in
Compose」https://developer.android.com/develop/ui/compose/performance/stability
条件②: Composable関数のパラメータが stableである 1. 型がImmutable 2. Compositionに変更が通知される 以下2つを満たすもの[3] • その型のプロパティが変更できない
• 全メソッドが参照透過的 • MutableState • SnapshotStateMap • SnapshotStateList [3] https://developer.android.com/develop/ui/compose/performance/stability#types コード引用: https://medium.com/androiddevelopers/jetpack-compose-stability-explained-79c10db270c8
【再掲】Strong Skipping Mode Jetpack ComposeのRecompositionを減らし、パフォーマンスを向上させるための Compose compilerの機能 特徴 1. unstableなパラメータをスキップ可能にする
2. unstableなキャプチャを持つラムダをrememberする
Strong Skipping Mode Jetpack ComposeのRecompositionを減らし、パフォーマンスを向上させるための Compose Compilerの機能 特徴 1. unstableなパラメータをスキップ可能にする
2. unstableなキャプチャを持つラムダをrememberする
1. unstableなパラメータをスキップ可能にする unstableなパラメータがあって もスキップ可能に!
今までは、以下のようにパラメータをstableにしてきた...! (これらが不要になったということではない) 1. unstableなパラメータをスキップ可能にする kotlinx.collections.immutableの使用 Stable Makerの使用 Stability configuration file
パラメータの変更有無の判断方法 1. unstableなパラメータをスキップ可能にする • stableなパラメータ: Structural equality(==)で判断 • unstableなパラメータ: Reference
equality(===)で判断
【再掲】Strong Skipping Mode Jetpack ComposeのRecompositionを減らし、パフォーマンスを向上させるための Compose Compilerの機能 特徴 1. unstableなパラメータをスキップ可能にする
2. unstableなキャプチャを持つラムダを rememberする
2. unstableなキャプチャを持つラムダを rememberする Lambda式の外部にある変数を参照すること Lambda式の外部の変数 viewModelを参照している 【前提知識】キャプチャ
2. unstableなキャプチャを持つラムダを rememberする Composableのパラメータにunstableなキャプチャを持つラムダがあると、 Recompositionをスキップできなかった UnstableなキャプチャviewModelがあるのでSampleImpl はRecompositionをスキップできなかった Strong Skipping Modeを有効にするとスキップ可能に!
👇
2. unstableなキャプチャを持つラムダを rememberする どのように実現しているか Compose compilerが自動で、Lambda式をremember(のような もの)でラップすることで、再生成を防いでくれる!!
感想 • パフォーマンスの問題が発生しない限り、Recompositionについてはそこまで考え なくてよかった • 一方で細部までにこだわってしまうのがエンジニアの「さが」だったのでは • Recompositionのスキップ条件がゆるくなったことでより考えることが減って良さそ う
詳しく知りたい方 今週投稿された記事! https://medium.com/androiddevelopers/jetpack-comp ose-strong-skipping-mode-explained-cbdb2aa4b900 https://medium.com/androiddevelopers/jetpack-co mpose-stability-explained-79c10db270c8 https://medium.com/androiddevelopers/new-ways-of-o ptimizing-stability-in-jetpack-compose-038106c283cc
おわり