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
480
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
キャリア25年目にしてTypeScript に出会うまで - 「型」を通じて振り返るプログラミング言語遍歴 / Meeting TypeScript After 25 Years in Tech - Looking Back at My Programming Language Journey Through "Types"
bitkey
PRO
2
280
GitHub Copilot CLI の Rubber Duck 機能を使ってコーディングの品質をあげよう #techbaton_findy
stefafafan
2
1.1k
AI時代に改めて考える、ドメイン駆動設計 - モデリングが「AIへの共通言語」になる
littlehands
8
2.4k
Javaで学ぶSOLID原則
negima
1
130
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
220
GitHub Copilot のこれまでとこれから: From Copilot to Collaborative Agents
yuriemori
1
190
大規模環境でどのように監視を実現する?
yuobayashi
1
150
Node.js+TypeScriptにおけるCJS/ESM相互運用の最新ポイント
grainrigi
2
120
ルール・ロール・ツールを創る / Creating Rules, Roles and Tools
ks91
PRO
0
170
Typiaで配信JSONの安全性を構造的に担保する(TSKaigi2026)
righttouch
PRO
1
180
サプライチェーン攻撃への備えについて考えている #湘なんか
stefafafan
3
2.4k
管理アカウント単一運用からAWS Organizationsに移行するの大変で滅
hiramax
0
250
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
KATA
mclloyd
PRO
35
15k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
30 Presentation Tips
portentint
PRO
1
300
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Mobile First: as difficult as doing things right
swwweet
225
10k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Between Models and Reality
mayunak
4
300
New Earth Scene 8
popppiees
3
2.3k
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
おわり