> ## 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.

# 微信小程序

> 深入了解 Flashduty 微信小程序 RUM 分析看板的核心功能，掌握小程序性能监控、setData 调优和启动耗时分析的关键指标

Flashduty 微信小程序 RUM 分析看板提供开箱即用的可视化仪表板，自动采集并分析小程序的用户会话、启动耗时、页面渲染、setData 调用等多维度数据，帮助您全面洞察小程序真实运行状况，快速定位性能瓶颈与异常问题，持续优化用户体验。

<Info>
  分析看板包含 2 个核心分析维度：**概览**、**性能分析**
</Info>

## 概览 — 关键指标一目了然

概览模块聚焦于小程序多维度的核心指标，帮助您快速把握整体健康状况。

#### 流量与会话

* **UV**：去重后的独立访客数。结合趋势图可洞察用户活跃规律。
* **会话数**：小程序被打开使用的会话总数，点击卡片可下钻查看具体会话列表。
* **用户访问趋势**：以时序图同时展示 UV 与 Session 的变化趋势，识别访问高峰与异常波动。

#### 核心指标

* **错误数（error\_count）**：监控小程序错误事件的总数与时序趋势，及时发现异常峰值。
* **会话错误率（session error rate）**：发生错误的会话占总会话的比例，反映小程序整体稳定性。
* **应用启动时长 P75（appLaunchTime P75）**：监控小程序冷启动 + 热启动整体耗时的 P75 分位值，评估启动性能表现。启动时长直接影响用户的第一印象。
* **首次渲染 P75（firstRender P75）**：监控页面从开始加载到首次渲染完成耗时的 P75 分位值，反映页面"白屏"时间。
* **setData 调用次数（setDataCount 平均值）**：监控页面平均每次访问的 `setData` 调用次数。过高的调用频次会增加 JS 与渲染线程的通信开销。
* **setData 耗时 P75（setDataDuration P75）**：监控单次 `setData` 调用耗时的 P75 分位值。

#### 会话分析

* **平均会话时长**：会话总时长除以会话总数，评估用户粘性与使用深度。结合时序图可识别活跃用户行为变化。

## 性能分析 — 全面掌控小程序体验

性能分析模块专注于小程序启动、页面渲染、`setData` 等核心体验指标的全链路监控。

#### 核心性能指标

顶部展示 5 个关键性能指标卡片，点击任一卡片可切换下方趋势图与样本分布的统计维度：

| 指标                    | 采集字段               | 说明                         |
| --------------------- | ------------------ | -------------------------- |
| **应用启动时长 P75**        | `app_launch`       | 小程序启动耗时的 P75 分位值           |
| **首次渲染 P75**          | `first_render`     | 页面首次渲染完成耗时的 P75 分位值        |
| **页面加载时长 P75**        | `loading_time`     | 页面从打开到完全加载完成耗时的 P75 分位值    |
| **setData 调用次数（平均值）** | `setdata_count`    | 单次页面访问内 `setData` 调用次数的平均值 |
| **setData 耗时 P75**    | `setdata_duration` | 单次 `setData` 调用耗时的 P75 分位值 |

每个卡片左上角显示健康状态徽标（良好 / 中等 / 差），基于内置阈值评估当前指标。

#### 趋势分析

下方的趋势图支持选择 **趋势模式**，按不同维度展开当前指标：

| 趋势模式      | 说明                                   |
| --------- | ------------------------------------ |
| **整体**    | 不分维度，展示当前指标的整体时序趋势                   |
| **按版本**   | 按应用版本号（version）分组，对比新旧版本性能差异         |
| **按环境**   | 按环境变量（env）分组，对比不同环境的性能表现             |
| **按加载类型** | 按 `view_loading_type` 分组，对比冷启动与热启动性能 |
| **按操作系统** | 按 `os_name` 分组，识别系统级兼容性差异            |

<Tip>
  切换 **按版本** 时可对比新版本灰度阶段的性能数据，验证发版质量；切换 **按加载类型** 时可单独观察冷启动（`initial_load`）和热启动（`route_change`）的耗时差异。
</Tip>

#### 样本分布

样本分布柱状图按时间区间统计当前指标的样本数量分布，识别长尾问题。例如观察应用启动时长时，分布图能清晰展示有多少用户的启动耗时落在 1s 以内、1-2s、2s 以上等区间。

#### 页面性能明细

按页面（视图名称）统计各项性能指标，识别加载缓慢或 `setData` 过于频繁的页面：

| 列                | 说明                                  |
| ---------------- | ----------------------------------- |
| 视图名称             | 小程序页面路由路径                           |
| 访问次数             | 该页面的 view 事件总数，附直方图条形展示相对热度         |
| 应用启动时长           | 落在该页面会话内的启动耗时 P75                   |
| 首次渲染             | 该页面首次渲染耗时 P75                       |
| 页面加载时长           | 该页面完全加载耗时 P75                       |
| setData 调用次数     | 该页面平均 setData 调用次数                  |
| setData 耗时       | 该页面单次 setData 耗时 P75                |
| onLoad → onShow  | 该页面从 `onLoad` 到 `onShow` 之间的耗时 P75  |
| onShow → onReady | 该页面从 `onShow` 到 `onReady` 之间的耗时 P75 |

点击表格中的任一行可跳转到该页面的详细分析视图。

#### 启动类型趋势

底部两张图分别展示冷启动（`initial_load`）与热启动（`route_change`）的对比情况：

* **启动类型趋势**：冷启动与热启动次数随时间的变化趋势，识别业务流量结构变化。
* **启动耗时趋势**：冷启动与热启动耗时的时序对比，冷启动通常显著长于热启动；如果两者差距异常缩小或拉大，往往意味着启动逻辑发生了变化。

<Info>
  **冷启动 vs 热启动**

  * **冷启动（initial\_load）**：用户首次进入小程序或小程序被微信回收后重新打开，需要完整初始化运行时和加载首页。
  * **热启动（route\_change）**：小程序在后台短时间被唤回，无需重新初始化，耗时显著更短。
</Info>

## 常见问题

<AccordionGroup>
  <Accordion title="应用启动时长和首次渲染时间有什么区别？">
    * **应用启动时长（app\_launch）**：从用户点击小程序图标或入口到 `App.onLaunch` 执行完成的总耗时，包含运行时初始化、首页代码包加载、`App.onLaunch` 执行等阶段。
    * **首次渲染（first\_render）**：从页面开始加载到该页面首次完成渲染的耗时，反映页面"白屏"时间。
    * 一次冷启动通常 = 应用启动时长 + 首页首次渲染时间，二者从不同角度衡量启动体验。
  </Accordion>

  <Accordion title="setData 调用次数过多会有什么影响？">
    `setData` 是小程序逻辑层向渲染层通信的核心 API，每次调用都会触发跨线程通信和差量计算。常见问题：

    * **频繁调用**：在循环或事件中高频调用 `setData`，导致渲染线程持续繁忙
    * **数据体积过大**：一次 `setData` 传递的数据过大，跨线程序列化耗时显著
    * **更新无关数据**：把整个 `data` 传给 `setData`，而不是仅传递变化的字段

    <Tip>
      **优化建议：**

      * 合并多次 `setData` 调用，使用局部对象传参
      * 使用路径表达式更新嵌套字段，如 `this.setData({ 'list[0].name': value })`
      * 避免在频繁触发的事件（scroll、input）中直接调用 `setData`，使用节流/防抖
      * 关注页面明细表中 `setData 调用次数` 和 `setData 耗时` 列异常高的页面，优先优化
    </Tip>
  </Accordion>

  <Accordion title="P75 分位数是什么意思？">
    分位数（Percentile）是统计学中衡量数据分布的重要指标：

    | 分位数          | 含义                          |
    | ------------ | --------------------------- |
    | **P50（中位数）** | 50% 的用户体验优于此值，50% 的用户体验劣于此值 |
    | **P75**      | 75% 的用户体验优于此值，25% 的用户体验劣于此值 |
    | **P90**      | 90% 的用户体验优于此值，10% 的用户体验劣于此值 |

    <Tip>
      **为什么使用 P75 而不是平均值？**

      * 平均值容易被极端值影响，可能不能代表大多数用户的真实体验
      * P75 更能反映大部分用户的体验情况，是业界常用的性能评估标准
    </Tip>
  </Accordion>

  <Accordion title="如何降低小程序启动耗时？">
    <Steps>
      <Step title="分析启动数据">
        关注 **应用启动时长 P75** 指标，并通过样本分布柱状图识别长尾。切换趋势模式为 **按加载类型** 单独观察冷启动表现。
      </Step>

      <Step title="精简代码包">
        减少首包体积，使用分包加载（subpackages）和分包预下载，避免一次性加载所有页面代码。
      </Step>

      <Step title="延迟非关键初始化">
        把第三方 SDK 初始化、埋点上报、远程配置拉取等非关键任务延迟到首屏渲染之后执行。
      </Step>

      <Step title="优化首页渲染">
        * 减少首屏依赖的网络请求数量，合并接口
        * 使用本地缓存或骨架屏，避免长时间白屏
        * 控制首屏 `setData` 的数据体积
      </Step>

      <Step title="关注版本变化">
        切换趋势模式为 **按版本**，对比新旧版本启动耗时，及时发现回退。
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="onLoad → onShow、onShow → onReady 这些指标有什么用？">
    这些是小程序页面生命周期内部各阶段的耗时，可用于精确定位渲染慢的环节：

    * **onLoad → onShow**：页面收到 `onLoad` 到 `onShow` 之间的耗时，主要反映 `onLoad` 中同步逻辑（参数解析、首屏数据预处理等）的耗时。
    * **onShow → onReady**：页面 `onShow` 到 `onReady` 之间的耗时，反映首次渲染完成所需的时间，包含模板编译和首批 `setData` 的渲染。

    如果首次渲染时间偏长，可结合这两个分段指标判断是 `onLoad` 中的逻辑阻塞，还是首次渲染本身耗时过长。
  </Accordion>

  <Accordion title="数据延迟是多少？">
    <Info>
      Flashduty RUM 通常在数据产生后的 **1-3 分钟**内完成采集和展示。在网络状况良好的情况下，大部分数据可实现准实时更新。
    </Info>
  </Accordion>
</AccordionGroup>

## 延伸阅读

<CardGroup cols={2}>
  <Card title="微信小程序 SDK 接入指南" icon="rocket" href="/zh/rum/sdk/wechat-miniprogram/sdk-integration">
    了解如何在微信小程序中接入 RUM SDK，完成应用初始化
  </Card>

  <Card title="微信小程序数据收集" icon="database" href="/zh/rum/sdk/wechat-miniprogram/data-collection">
    了解 SDK 自动采集的事件类型与 view 字段口径
  </Card>

  <Card title="微信小程序高级配置" icon="sliders" href="/zh/rum/sdk/wechat-miniprogram/advanced-config">
    深入配置代理、分布式追踪、采样率与手动上报
  </Card>

  <Card title="微信小程序兼容性" icon="shield-check" href="/zh/rum/sdk/wechat-miniprogram/compatible">
    查看 SDK 支持的小程序基础库版本与平台 API 要求
  </Card>
</CardGroup>
