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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yusuke Suzuki
July 12, 2024
Technology
470
0
Share
【詳解】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
エージェントスキルを作って自分のインプットに役立てよう
tsubakimoto_s
0
510
GitHub Copilot Dev Days
tomokusaba
0
130
Forget technical debt
ufried
0
150
需要創出(Chatwork)×供給(BPaaS) フライホイールとMoat 実行能力の最適配置とAI戦略
kubell_hr
0
1.8k
GitHub Copilot CLI と VS Code Agent Mode の使い分け
tomokusaba
0
130
Angular Architecture Revisited Modernizing Angular Architectural Patterns
rainerhahnekamp
0
120
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
2
250
The 7 pitfalls of AI
ufried
0
170
フロントエンドの相手が変わった - AIが加わったWebの新しいインターフェース設計
azukiazusa1
28
7.3k
EMから幅を広げるために最近挑戦していること / Recent challenges I'm undertaking to expand my horizons beyond EM
hiro_torii
1
180
Building Production-Ready Agents Microsoft Agent Framework
_mertmetin
0
140
Microsoft 365 / Microsoft 365 Copilot : 自分の状態を確認する「ラベル」について
taichinakamura
0
440
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
320
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Abbi's Birthday
coloredviolet
2
7.4k
Code Reviewing Like a Champion
maltzj
528
40k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
130
GitHub's CSS Performance
jonrohan
1032
470k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.4k
Bash Introduction
62gerente
615
210k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
170
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
120
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.7k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
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
おわり