5月24日にGoogle I/Oが開催
geminiが話題になりそうな。
サイトには例年通り意味わからんパズルがあるみたい。
Jetpack Composeのパフォーマンス最適化
Composeの安定性を完全理解する記事。
まず、以下のフェーズを意識することが大事。
- Compositionは、Composable関数をスロットに割り当てる。これによりツリーを記録として残せるため、不要なreocmposeとかをなくせる。
- Layoutは、コンポーザブルノードの測定と配置を行う。それにより構造内の正確な位置を保証する。
- Drawingは、デバイスの画面にレンダリングする。
Compose CompilerはComposable関数の引数を安定と不安定の二種類に分ける。これをrecomposeするかどうかの判断に用いる。
primitive型とかラムダ式、immutableなプロパティで構成されたデータクラス、@Stableや@Immutableマークをつけたクラスなどが安定とみなされる。
List, MapなどのintarfaceやAny型のようにコンパイル時に実装が読めない抽象クラスは不安定とみなされる。あと、mutableなプロパティを含むクラス。
新しい引数が渡されるとequalsメソッドで比較される。==
Composable関数の推論について
Compose CompilerはKotlin-pluginで構築されているので、コンパイル時にソースコードをいじることができる。
その際にCompilerはComposable関数を
- Restartable
- Moveable
- Replaceable
の三つのグループに分類する。
Restartableについて
コンパイラによって決定される。Restartableは型だよ。
そういう意味での推論。
Compose Metrics
Compoes Compiler pluginを用いると複雑なコード部分の解析ができるようになる。
以下のファイルが生成される。
- module.json
- skippableComposableとrestartableComposableの割合などが見れる
- composablex.txt
- 特定のComposable関数の引数や安定かどうかなど関数の細かい状態がシグネチャ形式でわかる
- classes.txt
- 特定のクラスの安定性についてどう判断したのかがわかる
不安定なクラスを安定なクラスに変換する方法
-
@Immutable
- プロパティが変更されることはないことを保証する
- @Stable