SDK 性能影响
KMonitor SDK 对应用启动和每个事件开销的影响的基准,以及与 Firebase 初始化的比较。
请查看下面各平台的说明,了解 KMonitor SDK 对应用性能的影响。
Android
基准测试
我们使用运行 Android 13(API 33)的 Pixel 4a 对 SDK 的性能影响进行了基准测试。每个测试运行 35 次,并使用 Macrobenchmark。详细方法请参见 android/measure-android/benchmarks。
基准测试结果会受设备和应用影响。建议你在自己的应用上运行基准测试, 得到更贴近真实场景的结果。这里公布的数据仅作为参考,也用于我们内部检测性能回归。
v0.16.0 的基准测试结果:
- 对于简单应用,应用启动时间(time to initial display)增加 17.5ms-31.3ms(中位数 24.3ms)。
- 检测点击手势并创建布局快照会增加 0.6-1ms。
分析
为了衡量 SDK 对应用的影响,我们在代码关键路径中添加了 Trace。这些 Trace 可以帮助你使用 Macrobenchmark,或直接使用 Perfetto 分析性能。
相关 Trace 如下:
| 指标 | 描述 |
|---|---|
msr-init | 在主线程初始化耗时 |
msr-start | 调用 Measure.start 时在主线程上的耗时 |
msr-stop | 调用 Measure.stop 时在主线程上的耗时 |
msr-trackEvent | 将事件写入本地存储的耗时,几乎全部发生在非主线程 |
msr-trackGesture | 在主线程跟踪手势的耗时 |
msr-generateSvgAttachment | 在后台线程生成 SVG 布局的耗时 |
msr-captureScreenshot | 在主线程采集并压缩截图的耗时 |
msr-loadImageFromFile | 在主线程从文件加载图片的耗时 |
msr-loadImageFromUri | 在主线程从 Uri 加载图片的耗时 |
与 Firebase 初始化的比较
下面是使用 Macrobenchmark 对比 KMonitor SDK 与 Firebase 初始化耗时的结果。测试在 Pixel 4a 上运行,
使用 Firebase BOM 33.7.0 和 KMonitor Android SDK 0.10.0。
Firebase 会分多个阶段初始化。在集成 Firebase Crashlytics、Performance 和 Analytics 的基准应用中,
观测到的初始化总耗时中位数为 77.6ms。同一 Macrobenchmark 中,KMonitor 的耗时为 35.0ms。

其中一次运行的 Perfetto 屏幕截图:

iOS
基准测试
我们使用运行 iOS 18.5 的 iPhone 14 Plus 上的基准应用,对 iOS SDK 的性能影响进行了测试。
每个场景执行 5 次,并使用 os_signpost 精确记录耗时。指标通过 Instruments
(Time Profiler 和 Logging Signposts)采集。
性能影响会随设备和应用复杂度变化。 我们建议你在自己的应用上测量实际影响。 以下数字用作参考基线,并在内部用于监控回归。
基准测试结果 (v0.6.0)
KMonitor 会为应用启动时间(time to initial display)增加 21.03-25.7ms(平均约 22.8ms)。 SDK 执行的其他关键操作如下:
| 操作 | p95 | 描述 |
|---|---|---|
trackEvent | 195 微秒 | 包括事件采集、属性补充和入队 |
appendAttributes | 360 微秒 | 动态属性采集(例如网络、设备状态) |
trackBugReport | 120 微秒 | 完整流程,包括截图、布局和元数据 |
trackEventUserTriggered | 32 微秒 | 记录用户触发事件 |
trackSpanTriggered | 96 微秒 | 发出 Trace 事件时的耗时 |
spanProcessorOnStart | 105 微秒 | 创建 Span |
spanProcessorOnEnded | 355 微秒 | Span 序列化和缓冲 |
generateScreenshot | 80 毫秒 | UI 快照和压缩 |
generateLayoutSnapshot | 7.5 毫秒 | 采集布局层级 |