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
Yusuke Suzuki
July 12, 2024
Technology
500
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.5k
Android Lintでコードの宣言順をチェッ クする / check-declaration-order-with-android-custom-lint
yusukesuzuki1213
0
2.1k
Other Decks in Technology
See All in Technology
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
430
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
9.3k
AIに持続⼒を与える 判断の⻑期記憶設計
eiei114
1
260
事業価値と Engineering 2026年度版
recruitengineers
PRO
51
25k
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
120
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
120
Model Studio CLI × Token Plan
maigo999
0
200
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
LanceDB入門
mocobeta
9
620
SmartHR Engineering Team Deck
smarthr
1
3k
小粒でもパワフルなJS Runtime Antjsについて
comamoca
0
110
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
280
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
490
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
sira's awesome portfolio website redesign presentation
elsirapls
0
330
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Technical Leadership for Architectural Decision Making
baasie
3
510
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
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
おわり