Compose 与原生启动性能对比

简介: Compose 与原生启动性能对比

Macrobenchmark 接入


官方接入文档:macrobenchmark


接入运行报错:


java.lang.RuntimeException: Baseline profiles aren't supported on this device version
  at androidx.benchmark.macro.CompilationMode$Partial.broadcastBaselineProfileInstall(CompilationMode.kt:261)
  at androidx.benchmark.macro.CompilationMode$Partial.compileImpl$benchmark_macro_release(CompilationMode.kt:285)
  at androidx.benchmark.macro.CompilationMode.resetAndCompile$benchmark_macro_release(CompilationMode.kt:73)
  at androidx.benchmark.macro.MacrobenchmarkKt.macrobenchmark(Macrobenchmark.kt:139)
  at androidx.benchmark.macro.MacrobenchmarkKt.macrobenchmarkWithStartupMode(Macrobenchmark.kt:301)
  at androidx.benchmark.macro.junit4.MacrobenchmarkRule.measureRepeated(MacrobenchmarkRule.kt:102)
  at androidx.benchmark.macro.junit4.MacrobenchmarkRule.measureRepeated$default(MacrobenchmarkRule.kt:92)
  at com.codelang.benchmark.ExampleStartupBenchmark.startup(ExampleStartupBenchmark.kt:30)
复制代码

搜了下 stackoverflow ,不支持 Android 12 的设备,在 issueracker 上 google 也给了回复,不支持在 Android 12L 上运行,建议在小于等于 31 的 API 上运行:

image.png

由于我需要测 Compose 项目,所以根据答主所述,需要引入 profileinstall-1.2.0-alpha 版本,来覆盖掉 compose-ui 透传引入的 profileinstall 版本

测试:


此次测试运行的是 release 版本,并且每次测试结束都会让 Android Studio 静置一会,然后杀死 java 进程。


数据并不能保证很准确,仅供参考,因为在不同的电脑和环境下,都会产生不同的数据。

本次测试的启动页面是列表,原生采用 RecyclerView 实现,Compose 采用 LazyColumn 实现。


电脑配置:


  • CPU:1.4 GHz 四核 Intel Core i5
  • 内存:8 GB 2133 MHz LPDDR3

模拟器:


  • Android 11

演示代码地址:


点击绿色运行按钮即可开始测试:


image.png

测试结果


image.png

image.png

每组测试用例自动执行 5 遍,结果会输出这 5 次中的最小值、中值、最大值,我们取中值来对比可能比较合理点:


image.png

从本次测试结果来,Compose 的冷启动略逊于原生,两者相差 124ms,但在热启动与温启动状态下,Compose 性能又优于原生。

目录
相关文章
|
网络协议
内网穿透的原理和实现方式
一、定义 内网穿透也成NAT穿透,进行NAT穿透是为了使具有某一个特定源IP地址和源端口号的数据包不被NAT设备屏蔽而正确路由到内网主机。
|
存储 缓存 编译器
探索 Jetpack Compose 内核:深入 SlotTable 系统
探索 Jetpack Compose 内核:深入 SlotTable 系统
551 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Step-Audio2 声音克隆 详细介绍
Step-Audio2是StepFun于2024年推出的中文语音克隆大模型,支持“一句话克隆+情感可控+实时流式”一体化生成,参数总量300M,首包延迟低至120ms,MOS达4.4+,采用Apache-2.0协议开源,适配商业应用,是当前中文TTS领域开源落地门槛最低的方案之一。
|
存储 数据可视化 API
1688商品详情数据接口:如何通过1688 API实现批量商品数据抓取和分析
使用1688 API进行批量商品数据抓取和分析,首先需注册账号创建应用获取App Key和Secret Key。研究API文档,构建请求URL,如商品详情、搜索、销售量等接口。利用编程语言发送HTTP请求,实时抓取并处理数据,存储到数据库。实施优化策略,处理错误,记录日志。数据可视化展示并确保API安全性。编写文档并持续更新以适应API变化。参考[c0b.cc/R4rbK2]获取API测试和SDK。
|
11月前
|
UED
交互好且转化率高的表单设计技巧分享
表单在网页设计、app或者软件界面当中被广泛的使用,因而表单设计是个比较重要的工作
256 3
|
数据采集 存储 JSON
C语言如何执行HTTP GET请求
C语言如何执行HTTP GET请求
|
缓存 监控 Java
在使用 Glide 加载 Gif 动画时避免内存泄漏的方法
【10月更文挑战第20天】在使用 Glide 加载 Gif 动画时,避免内存泄漏是非常重要的。通过及时取消加载请求、正确处理生命周期、使用弱引用、清理缓存和避免重复加载等方法,可以有效地避免内存泄漏问题。同时,定期进行监控和检测,确保应用的性能和稳定性。需要在实际开发中不断积累经验,根据具体情况灵活运用这些方法,以保障应用的良好运行。
|
存储 数据处理 Kotlin
Kotlin Flow背后的神秘力量:背压、缓冲与合并策略的终极揭秘!
【9月更文挑战第13天】Kotlin Flow 是 Kotlin 协程库中处理异步数据流的强大工具,本文通过对比传统方法,深入探讨 Flow 的背压、缓冲及合并策略。背压通过 `buffer` 函数控制生产者和消费者的速率,避免过载;缓冲则允许数据暂存,使消费者按需消费;合并策略如 `merge`、`combine` 和 `zip` 则帮助处理多数据源的整合。通过这些功能,Flow 能更高效地应对复杂数据处理场景。
493 2
|
开发工具 git 开发者
[译] 🙏 请把 .gitattributes 加入你的项目
[译] 🙏 请把 .gitattributes 加入你的项目
[译] 🙏 请把 .gitattributes 加入你的项目
|
缓存 移动开发 监控
淘宝页面首帧优化的经验和心得
淘宝页面首帧优化的经验和心得
558 9