> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashcat.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# iOS SDK 性能影响

> 了解 Flashduty iOS RUM SDK 对应用 CPU、内存、启动时间、包大小和网络使用的影响，以及性能优化建议。

## 概述

在将任何 SDK 集成到 iOS 应用时，了解其性能影响对于维护良好的用户体验至关重要。Flashduty RUM SDK 在设计时以最小化性能开销为目标，并提供透明的测量数据，帮助您评估 SDK 是否符合应用的性能预算。

<Check>
  SDK 采用异步处理机制，所有数据处理都在后台队列中进行，不会阻塞主线程。
</Check>

## 性能基准测试

为了评估 SDK 对应用性能的实际影响，我们在典型使用场景下进行了性能基准测试。测试中启用了以下 SDK 功能：

* 基础 RUM 监控：视图、操作、资源追踪
* 链路追踪

SDK 使用默认配置进行初始化，并模拟常见用户操作（如页面浏览、滚动列表、网络请求等）。

### 测试结果

| 指标         | 集成 SDK 后               | 未集成 SDK   | 影响       |
| ---------- | ---------------------- | --------- | -------- |
| 峰值 CPU 使用率 | \~44%                  | \~40%     | +4%      |
| 峰值内存使用     | \~72 MB                | \~68 MB   | +4 MB    |
| 应用启动时间     | \~0.9 ms               | \~0.65 ms | +0.25 ms |
| 包大小        | +1.4 MB                | -         | 约 1.4 MB |
| 网络使用       | \~22 KB 发送 / \~2 KB 接收 | -         | 根据事件量变化  |

<Note>
  以上数据为典型场景下的参考值，实际影响会因应用复杂度、设备性能和 SDK 配置不同而有所差异。
</Note>

### 性能影响详解

<AccordionGroup>
  <Accordion title="CPU 使用率" icon="microchip">
    SDK 对 CPU 的影响主要来自：

    * 事件收集和处理
    * 数据批处理和压缩
    * 网络请求上报

    SDK 采用异步处理机制，所有数据处理都在后台队列中进行，不会阻塞主线程，确保不影响应用的 UI 响应性能。
  </Accordion>

  <Accordion title="内存使用" icon="memory">
    SDK 使用固定大小的内存缓冲区存储待上报的事件数据，不会随时间无限增长。过旧的数据会被自动清理，确保不会占用过多内存。
  </Accordion>

  <Accordion title="启动时间" icon="rocket">
    SDK 初始化过程经过优化，对应用启动时间的影响控制在亚毫秒级。

    <Tip>
      建议在 `AppDelegate` 的 `didFinishLaunchingWithOptions` 中尽早初始化 SDK，以便捕获完整的应用启动过程。
    </Tip>
  </Accordion>

  <Accordion title="包大小" icon="box">
    SDK 采用模块化设计，您可以根据需要只引入必要的功能模块：

    | 依赖名称                      | Import 名称                | 说明         |
    | ------------------------- | ------------------------ | ---------- |
    | `FlashcatCore`            | `DatadogCore`            | 核心功能（必需）   |
    | `FlashcatRUM`             | `DatadogRUM`             | RUM 监控     |
    | `FlashcatTrace`           | `DatadogTrace`           | 链路追踪       |
    | `FlashcatWebViewTracking` | `DatadogWebViewTracking` | WebView 追踪 |

    只引入必要的模块可以最小化对包大小的影响。
  </Accordion>

  <Accordion title="网络使用" icon="wifi">
    SDK 采用以下策略优化网络使用：

    * **批量上报**：事件先缓存到本地，批量发送以减少网络请求次数
    * **数据压缩**：上报数据经过压缩处理，减少传输流量
    * **智能调度**：根据网络状态和电量情况智能调度上报时机
  </Accordion>
</AccordionGroup>

## 性能优化建议

如果您对性能有特殊要求，可以考虑以下优化措施：

<Steps>
  <Step title="调整采样率">
    通过配置采样率减少收集的事件数量：

    ```swift theme={null}
    RUM.enable(
        with: RUM.Configuration(
            applicationID: "<RUM_APPLICATION_ID>",
            sessionSampleRate: 80 // 采样 80% 的会话
        )
    )
    ```
  </Step>

  <Step title="按需启用功能">
    只启用必要的追踪功能：

    ```swift theme={null}
    RUM.enable(
        with: RUM.Configuration(
            applicationID: "<RUM_APPLICATION_ID>",
            uiKitViewsPredicate: nil, // 禁用自动视图追踪
            uiKitActionsPredicate: nil // 禁用自动操作追踪
        )
    )
    ```
  </Step>

  <Step title="禁用后台事件追踪">
    如果不需要追踪后台事件：

    ```swift theme={null}
    RUM.enable(
        with: RUM.Configuration(
            applicationID: "<RUM_APPLICATION_ID>",
            trackBackgroundEvents: false
        )
    )
    ```
  </Step>
</Steps>

## 离线数据存储

SDK 在设备离线时会将数据存储到本地，存储空间使用受到严格限制：

<Check>
  * 使用固定大小的磁盘缓存
  * 过期数据自动清理
  * 不会因缓存数据过多影响设备存储空间
</Check>

## 电池消耗

SDK 在设计时充分考虑了电池消耗：

* 在电量低于特定阈值时自动降低上报频率
* 利用系统的后台任务机制进行数据上报
* 避免频繁唤醒设备

## 相关文档

<CardGroup cols={2}>
  <Card title="SDK 接入指南" icon="plug" href="/zh/rum/sdk/ios/sdk-integration">
    了解如何接入 SDK
  </Card>

  <Card title="高级配置" icon="sliders" href="/zh/rum/sdk/ios/advanced-config">
    了解如何配置 SDK 的高级功能
  </Card>

  <Card title="数据收集" icon="database" href="/zh/rum/sdk/ios/data-collection">
    了解 SDK 收集的数据类型
  </Card>

  <Card title="兼容性" icon="check-circle" href="/zh/rum/sdk/ios/compatible">
    了解 SDK 支持的平台版本
  </Card>
</CardGroup>
