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
Modifier.composedがプロダクトに与えている影響 ~「Modifier.Node...
Search
felix
September 25, 2023
0
850
Modifier.composedがプロダクトに与えている影響 ~「Modifier.Nodeを使いましょう」を踏まえて~
Here is the presentation slide I used when speaking at After DroidKaigi 2023
felix
September 25, 2023
Tweet
Share
Featured
See All Featured
Scaling GitHub
holman
458
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
Docker and Python
trallard
40
3.1k
Designing for humans not robots
tammielis
250
25k
How STYLIGHT went responsive
nonsquared
95
5.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Building Adaptive Systems
keathley
38
2.3k
Navigating Team Friction
lara
183
14k
The Invisible Side of Design
smashingmag
297
50k
How to Ace a Technical Interview
jacobian
276
23k
Transcript
Copyright (C) 2020 Yahoo Japan Corporation. All Rights Reserved. ©
Yahoo Japan ~「Modifier.Nodeを使いましょう」を踏まえて~ Modifier.composedがプロダクトに与え ている影響 ヤフー株式会社 ヤフオク!統括本部プロダクション1本部 ⻑濱 伶
© Yahoo Japan 2 • ⻑濱 伶(Nagahama Rei) X: @Fel1Tech
• ヤフー株式会社に2021年度新卒⼊社 • PayPayフリマとヤフオク!のアプリ開発担当
© Yahoo Japan このセッションについて Sujiさんの「Modifier.Nodeを使いましょう」に興味を持っていただき、セッショ ンを⾒たときに理解がしやすくなるような概要や知識をお話しします 3
© Yahoo Japan アジェンダ 1. このセッションをフォーカスした理由 2. 「Modifier.Nodeを使いましょう」の概要 3. プロダクトに与えていた影響
4. 現時点でのModifier.Nodeへの移⾏状況 4
© Yahoo Japan アジェンダ 1. このセッションをフォーカスした理由 2. 「Modifier.Nodeを使いましょう」の概要 3. プロダクトに与えていた影響
4. 現時点でのModifier.Nodeへの移⾏状況 5
© Yahoo Japan • Modifier.composed が抱える問題を扱っている • Modifier.NodeがModifier.composedの代替として移⾏が進んでいる このセッションをフォーカスした理由 このセッションをフォーカスした理由
6
© Yahoo Japan • Modifier.composed が抱える問題を扱っている • Modifier.NodeがModifier.composedの代替として移⾏が進んでいる このセッションをフォーカスした理由 このセッションをフォーカスした理由
7 今の内に理解を深めておくことが重要
© Yahoo Japan アジェンダ 1. このセッションをフォーカスした理由 2. 「Modifier.Nodeを使いましょう」の概要 3. プロダクトに与えていた影響
4. 現時点でのModifier.Nodeへの移⾏状況 8
© Yahoo Japan • 不要なRecomposi0onが起きてしまう • Composi0onのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 9
© Yahoo Japan • 不要なRecompositionが起きてしまう • Compositionのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 10
© Yahoo Japan その前に 11
© Yahoo Japan Recompositionとは 不要なRecompositionが起きてしまう 12 • Viewの再描画 → パフォーマンスの低下
© Yahoo Japan Recompositionとは 不要なRecompositionが起きてしまう 13 • Viewの再描画 → パフォーマンスの低下
必要な時に必要な場所だけ⾏う
© Yahoo Japan • 誰が判断するの︖ • Compose Runtime Recompositionとは 不要なRecompositionが起きてしまう
14
© Yahoo Japan • いつ判断するの︖ • レイアウト⽣成時や親レイアウトが再⽣成された時 ルール (引数が同じ場合) •
Unitを返却するModifierやComposable関数はスキップする • Unit以外を返却するModifierはスキップしない Recompositionとは 不要なRecompositionが起きてしまう 15
© Yahoo Japan • 何をもとに判断しているの︖ • 前回の値と引数で渡された値のequals • falseの時は違うレイアウトだと判断されてRecomposi0onされる Recompositionとは
不要なRecompositionが起きてしまう 16
© Yahoo Japan • いつ判断するの︖ • レイアウト⽣成時や親レイアウトが再⽣成された時 • Unitを返却するModifierやComposable関数はスキップする •
Unit以外を返却するModifierはスキップしない Recompositionとは 不要なRecompositionが起きてしまう 17
© Yahoo Japan • 不要なRecomposi0onが起きてしまう • Composi0onのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 18
© Yahoo Japan 不要なRecompositionが起きてしまう 不要なRecompositionが起きてしまう 19 • Modifier.composedはUnitではなくModifierを返却するので、スキップされない • factoryのequalsが結果のModifierではなく、インスタンスで⽐較するため常にFalseに
Ҿ༻IUUQTDTBOESPJEDPNBOESPJEYQMBUGPSNGSBNFXPSLTTVQQPSU BOESPJEYNBJODPNQPTFVJVJTSDDPNNPO.BJOLPUMJOBOESPJEYDPNQPTFVJ$PNQPTFE.PEJpFSLUM
© Yahoo Japan 不要なRecompositionが起きてしまう 不要なRecompositionが起きてしまう 20 • Modifier.composedはUnitではなくModifierを返却するので、スキップされない • factoryのequalsが結果のModifierではなく、インスタンスで⽐較するため常にFalseに
常にRecomposition Ҿ༻IUUQTDTBOESPJEDPNBOESPJEYQMBUGPSNGSBNFXPSLTTVQQPSU BOESPJEYNBJODPNQPTFVJVJTSDDPNNPO.BJOLPUMJOBOESPJEYDPNQPTFVJ$PNQPTFE.PEJpFSLUM
© Yahoo Japan 仕組み 不要なRecompositionが起きてしまう 21 Ҿ༻IUUQTRJJUBDPN@463+@JUFNTEDB⒎EBE
© Yahoo Japan • 不要なRecomposi0onが起きてしまう • Composi0onのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 22
© Yahoo Japan • 不要なRecompositionが起きてしまう • Compositionのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 23
© Yahoo Japan Clickableの場合 Compositionのツリーが⼤きくなることによる監視コストの増加 24 Ҿ༻IUUQTRJJUBDPN@463+@JUFNTEDBGGEBE
© Yahoo Japan 多くのItemを配置すると Compositionのツリーが⼤きくなることによる監視コストの増加 25 Ҿ༻IUUQTRJJUBDPN@463+@JUFNTEDBGGEBE
© Yahoo Japan • 不要なRecomposi0onが起きてしまう • Composi0onのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 26
© Yahoo Japan • 不要なRecomposi0onが起きてしまう • Composi0onのツリーが⼤きくなることによる監視コストの増加 Modifier.composedが抱える問題 「Modifier.Nodeを使いましょう」の概要 27
Modifier.Nodeで主に解決される
© Yahoo Japan 余談: 勘違いしていたこと 28
© Yahoo Japan 余談: 勘違いしていたこと 29
© Yahoo Japan 仕組み 不要なRecompositionが起きてしまう 30 Ҿ༻IUUQTRJJUBDPN@463+@JUFNTEDBGGEBE
© Yahoo Japan 余談: 勘違いしていたこと 31 Ҿ༻IUUQTRJJUBDPN@463+@JUFNTEDB⒎EBE
© Yahoo Japan アジェンダ 1. このセッションをフォーカスした理由 2. 「Modifier.Nodeを使いましょう」の概要 3. プロダクトに与えていた影響
4. 現時点でのModifier.Nodeへの移⾏状況 32
© Yahoo Japan • ⼀回のみ実⾏したい処理 (例: ログ) → Composable内部で呼び出すとRecomposi0onのたびに実⾏される可能性 プロダクトに与えていた影響
33
© Yahoo Japan • ⼀回のみ実⾏したい処理 (例: ログ) → Composable内部で呼び出すとRecomposi0onのたびに実⾏される可能 プロダクトに与えていた影響
34 Modifier.Nodeへの移⾏でどのように変わるのかをみてみましょう
© Yahoo Japan 例 プロダクトに与えていた影響 35
© Yahoo Japan 結果 プロダクトに与えていた影響 36 • クリックするたびに「A」のRecomposi0onが起きる
© Yahoo Japan 移⾏するとどう変わる︖ 37
© Yahoo Japan onFocusChangedを使⽤してみる プロダクトに与えていた影響 38
© Yahoo Japan 結果 プロダクトに与えていた影響 39 • 同様に「A」のRecompositionが起きる
© Yahoo Japan Node対応後のonFocusChangedは︖ プロダクトに与えていた影響 40
© Yahoo Japan 結果 プロダクトに与えていた影響 41 • Recompositionが起こっていない
© Yahoo Japan 実験からわかること プロダクトに与えていた影響 42 • Node対応後は引数が変わるなどの必要な場合しかRecomposi0onしない → できるだけNodeに移⾏したModifier修飾⼦を使った⽅が良い
© Yahoo Japan 実験からわかること プロダクトに与えていた影響 43 • Node対応後は引数が変わるなどの必要な場合しかRecompositionしない → できるだけNodeに移⾏したModifier修飾⼦を使った⽅が良い
どれくらい移⾏している︖
© Yahoo Japan アジェンダ 1. このセッションをフォーカスした理由 2. 「Modifier.nodeを使いましょう」の概要 3. プロダクトに与えていた影響
4. 現時点でのModifier.Nodeへの移⾏状況 44
© Yahoo Japan • 移⾏前のModifier • clickable (段階的に移⾏済み) • border
• draggable • scrollable •移⾏済の主要なModifier • onFocusChanged • focusable Modifier.Nodeへの移⾏状況(BOM ver.2023.09.00時点) 45 ରԠPR: https://android-review.googlesource.com/q/Modifier.Node
© Yahoo Japan • Modifier.Nodeに移⾏前のAPIでは、不必要なRecomposi0onが⾛ってしまう • ⾃前で導⼊も可能だが負債になる可能性 • 段階的に導⼊が進められているため最新バージョンにアップデートを︕ •
詳しくは LT: Modifier.Nodeを使いましょう Qiita: Modifier.Nodeを使いましょう まとめ 46
© Yahoo Japan ご清聴ありがとうございました︕ 47