Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Jetpack Composeの スクロールパフォーマンス改善を検証した話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
umsys
March 05, 2024
Programming
750
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Jetpack Composeの スクロールパフォーマンス改善を検証した話
umsys
March 05, 2024
More Decks by umsys
See All by umsys
Gemini APIを使ってみよう@potatotips#86
umsys
0
4.8k
ZOZOTOWNアプリでのフルCompos実装取り組み事例
umsys
0
1.4k
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
460
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
一人だけ、Kiroが静止する日
hideg
0
110
App Intentsのビルドプロセスを支える技術
kntkymt
0
380
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
170
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
320
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
570
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
1
320
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.2k
What We Talk About When We Talk About XP
m_seki
2
630
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
170
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
570
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Utilizing Notion as your number one productivity tool
mfonobong
4
590
The browser strikes back
jonoalderson
0
1.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
280
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Designing Experiences People Love
moore
143
24k
Transcript
Jetpack Composeの スクロールパフォーマンス改善を検証 した話 2024/03/05 Mobile勉強会 Wantedly × チームラボ ×
Sansan #13 内山雅由(@umsys_)
自己紹介 株式会社ZOZO X: @umsys_ Bluesky: @umsys.bsky.social GitHub: https://github.com/umsys
内山 雅由 • 車の運転とゲームとハリネズミが大好きです。 • 最近はポケモンカードにハマっています。 • 月曜日に治療した虫歯が神経に近かったため、 半年くらい40℃前後のものしか飲食できなくなりました。 つらいです。
Jetpack Compose導入において (個人的な)最大のメリット
Lazy コンポーネント! • LazyColumn • LazyRow • LazyVerticalGrid • LazyVerticalStaggeredGrid(experimental)
などなど
便利なLazyコンポーネントですが 各所で不満の声も。 その一つが。。。
スクロールパフォーマンスに難がある 特に、画像表示と組み合わせるとカクつきが目立つ話は 各所で話が上がっていました。 パラメータを調整したり、遅延読み込みを実装したりなど、 皆様苦労されている様子です。
朗報です! スクロールパフォーマンス改善を謳った バージョンがリリースされました🎉
Compose 1.6.0 • 全体的にパフォーマンスが大幅に向上 • スクロール パフォーマンスが20% 向上(1.5.0から比較して) • 起動時間が12%
向上(1.5.0から比較して) • ほとんどのアプリでは最新バージョンにアップグレードするだけで OK • 他のコードを変更する必要はない 引用:https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html
Jetpack Composeの画像表示で よく使われているCoilも パフォーマンス改善を謳った バージョンがリリースされました🎉
Coil 2.6.0 • rememberAsyncImagePainter、AsyncImage、および SubcomposeAsyncImage を再起動およびスキップ可能に • コンポーザブルの引数のいずれかが変更されない限り、再コンポ ジションが回避され、パフォーマンスが向上 •
通常メインスレッドで発生する遅い初期化を修正 • などなど 引用:https://github.com/coil-kt/coil/blob/main/CHANGELOG.md#260---february-23-2024
ということで、 アップデート前後でそれぞれの パフォーマンスを比較しました。
検証環境 / 使用ツール • 検証端末:Pixel7(Android14) • メトリクス測定:Macrobenchmark ◦ N =
5 ◦ CompilationMode.DEFAULT ▪ GooglePlay経由でインストールした状態を再現 • JetpackCompose1.5.4 / 1.6.0、Coil2.5.0 / 2.6.0の 組み合わせでそれぞれ計測
検証環境 / 使用ツール パフォーマンス計測対象のUI
検証環境 / 使用ツール パフォーマンス計測対象のUI ビルド
検証環境 / 使用ツール Macrobenchmarkの テストケース 引用 :https://github.com/android/perfor mance-samples/blob/main/Macrob enchmarkSample/macrobenchmark /src/main/java/com/example/macr
obenchmark/benchmark/scroll/Scr ollBenchmark.kt
検証環境 / 使用ツール Macrobenchmarkの テストケース スクロールダウン×2、スクロールアップ×2を実行 スクロール速度:15000pic/sec(デフォルトの2倍) ※デフォルトのスクロール速度はちょっと遅かった
メトリクス • timeToInitialDisplayMs ◦ 初期表示までの時間 • frameDurationCpuMs ◦ UI スレッドと
Renderスレッドの両方でフレームの生成に CPU でかかった 時間。 • frameOverrunMs ◦ 指定されたフレームが期限を超過した時間。 ◦ 正の数値はフレーム落ちや目に見えるジャンクまたはスタッターを示します。 →すべての数値は低ければ低いほどパフォーマンスが高い 引用:https://developer.android.com/topic/performance/benchmarking/macrobenchmark-metrics?hl=ja
検証結果
グラフ作成:chatGPT 253.1 286.4 270.9 261.9 278.6 307.7 283.5 266.0 494.5
548.3 421.1 395.4
グラフ作成:chatGPT 253.1 286.4 270.9 261.9 278.6 307.7 283.5 266.0 494.5
548.3 421.1 395.4 リリースノート通り Coil 2.6.0によって 遅い初期化を修正がされている。
4.7 4.1 4.4 4.6 7.1 6.7 7.2 7.3 8.2 7.4
8.5 8.5 11.6 10.0 13.0 12.2
4.7 4.1 4.4 4.6 7.1 6.7 7.2 7.3 8.2 7.4
8.5 8.5 11.6 10.0 13.0 12.2 強いて言うなら、 Compose 1.6.0に上げただけの場合に パフォーマンスが少し向上している
-10.3 -10.5-10.6 -9.4 -3.8 -3.9 -3.9 -3.6 -3.4 -3.7 -3.2
-3.5 2.4 4.2 9.2 9.2
-10.3 -10.5-10.6 -9.4 -3.8 -3.9 -3.9 -3.6 -3.4 -3.7 -3.2
-3.5 2.4 4.2 9.2 9.2 Coil 2.6.0によって 遅い初期化を修正がされていたが、 P99においてフレームの期限超過時間が 上昇してしまっている。
メトリクス上において Compose1.6.0によって改善される 目を見張るような顕著な差は 見受けられなかった このままではお蔵入り
目視でカクつきが減っていることを 確信していたので、 ジャンクフレームの発生率に 注目して再度分析
Jetpack Compose 1.5.4
Jetpack Compose 1.6.0
ジャンクフレーム発生が 激減していました🎉 やったね!
まとめ • Compose 1.6.0に上げることでジャンクフレームが減る=ユーザー体験が良くなる • Coil 2.6.0に上げることで初期表示は速くなるが、フレーム期限超過時間のレイテンシが悪くなりそう • 目視確認は大切
ご清聴ありがとうございました!