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
0
380
【詳解】Compose Strong Skipping Mode
I provided a detailed explanation of Strong skipping mode.
Yusuke Suzuki
July 12, 2024
Tweet
Share
More Decks by Yusuke Suzuki
See All by Yusuke Suzuki
Android Vitalsのデータを自動監視して、 ビジネス指標を向上させよう/ Automatically monitor Android Vitals data to improve business metrics.
yusukesuzuki1213
0
6.1k
Android Lintでコードの宣言順をチェッ クする / check-declaration-order-with-android-custom-lint
yusukesuzuki1213
0
1.8k
Other Decks in Technology
See All in Technology
kintone開発チームの紹介
cybozuinsideout
PRO
0
73k
ソフトウェア エンジニアとしての 姿勢と心構え
recruitengineers
PRO
17
8.4k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
3
1.2k
浸透しなさいRFC 5322&7208
hinono
0
130
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
4
990
Yahoo!ニュースにおけるソフトウェア開発
lycorptech_jp
PRO
0
480
人と組織に偏重したEMへのアンチテーゼ──なぜ、EMに設計力が必要なのか/An antithesis to the overemphasis of people and organizations in EM
dskst
6
690
AIエージェントの活用に重要な「MCP (Model Context Protocol)」とは何か
masayamoriofficial
0
160
知られざるprops命名の慣習 アクション編
uhyo
11
2.7k
Go で言うところのアレは TypeScript で言うとコレ / Kyoto.なんか #7
susisu
7
2k
GitHub Copilot coding agent を推したい / AIDD Nagoya #1
tnir
4
4.8k
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
8.6k
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
Into the Great Unknown - MozCon
thekraken
40
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Site-Speed That Sticks
csswizardry
10
790
The Invisible Side of Design
smashingmag
301
51k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Docker and Python
trallard
45
3.5k
Making Projects Easy
brettharned
117
6.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
780
Automating Front-end Workflow
addyosmani
1370
200k
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
おわり