LoginSignup
2
0

[WIP] #318 2024-03-17 駄菓子

Last updated at Posted at 2024-03-25

5月24日にGoogle I/Oが開催

geminiが話題になりそうな。
サイトには例年通り意味わからんパズルがあるみたい。

Jetpack Composeのパフォーマンス最適化

Composeの安定性を完全理解する記事。
まず、以下のフェーズを意識することが大事。

image.png

  • 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
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0