---
title: 性能
summary: 介绍小程序体验评分中性能类规则的定义、得分标准和优化建议。
questions:
  - FMP 首次有意义绘制的得分标准是多少？
  - setData 调用频率和数据大小的限制分别是多少？
  - TYML 节点数的得分标准是什么？
  - 如何优化页面渲染时间？
  - 网络请求耗时的得分标准是多少？
  - 小程序包大小的限制是多少？
  - 如何优化页面最低帧率？
  - 网络并发请求数的得分标准是什么？
  - 网络图片大小的限制是多少？
  - 小程序通道交互频次的限制是多少？
---

# 性能

## FMP（首次有意义绘制）

**定义：** 小程序首次有意义绘制（First Meaningful Paint）耗时。 <br>
**得分标准：** FMP 耗时 ≤ **1500ms** <br>
**优化建议：**

- 按优先级加载首屏内容，优先展示关键部分。
- 缓存高优先级数据，减少首屏请求延迟。
- 预加载关键资源，避免等待 API 回调。
- 降低一次性渲染数据量，优化计算逻辑。

## 渲染时间

**定义：** 页面首次渲染或因数据变化导致的重新渲染时间。 <br>
**得分标准：** 渲染时间 ≤ **500ms** <br>
**优化建议：**

- 减少 `setData` 传输量，降低 `setData` 调用频率。
- 避免同时渲染大面积内容，优化列表渲染（如虚拟列表）。
- 减少复杂计算。

## 页面最低帧率

**定义：** 页面最低帧率不得低于 30FPS，否则可能会出现卡顿现象。 <br>
**得分标准：** **≥30 FPS** <br>
**优化建议：**

- 使用 `RJS` 来处理高频的绘图需求。
- 将一些视图层需要计算的能力放在 `SJS` 中操作。

## 脚本执行时间

**定义：** JS 脚本在单次同步执行中的耗时。<br>  
**得分标准：** 单次执行 ≤ **1 秒** <br>
**优化建议：**

- 查看业务代码，确实是否执行了耗时过长的脚本
- 拆分大任务，使用异步分批执行。
- 避免阻塞主线程的同步操作，如大数据处理。

## `setData` 调用频率

**定义：** `setData` 过于频繁可能会造成界面卡顿。 <br>
**得分标准：** **≤20 次/秒** <br>
**优化建议：**

- 合并 `setData` 调用，避免无效更新。
- 仅更新必要数据，减少 `setData` 传输数据量。

## `setData` 数据大小

**定义：** `setData` 传输数据过大会导致 UI 更新延迟。 <br>
**得分标准：** **≤50KB（`JSON.stringify` 后）** <br>
**优化建议：**

- 仅传输必要字段，避免传输整个对象。
- 使用 `setData({a.b.c:1 })` 方式，局部更新数据。

## TYML 节点数

**定义：** 页面 DOM 结构过大影响渲染性能。 <br>
**得分标准：** **≤1000 个节点**，**树深度 ≤30 层**，**子节点数 ≤60** <br>
**优化建议：**

- 减少 DOM 层级，避免深层嵌套。
- 控制每个节点的子元素数量。

## 网络请求耗时

**定义：** 服务器响应时间过长会影响首屏加载速度。 <br>
**得分标准：** **≤1000ms** <br>
**优化建议：**

- 服务器端优化查询速度，使用缓存。
- 压缩返回数据，减少 `JSON` 体积。

## 网络并发请求数

**定义：** 并发网络请求过多可能触发小程序请求限制。 <br>
**得分标准：** **每秒并发超 300ms 请求数 ≤10** <br>
**优化建议：**

- 合并 API 请求，减少不必要的并发请求。

## 网络图片请求数

**定义：** 图片请求过多可能导致加载变慢。 <br>
**得分标准：** **≤20 次/秒** <br>
**优化建议：**

- 采用懒加载，避免一次性加载所有图片。
- 合理使用 CSS `background-image` 或雪碧图。

## 网络图片大小

**定义：** 图片过大会增加加载时间，影响首屏渲染。 <br>
**得分标准：** **单张 ≤300KB** <br>
**优化建议：**

- 压缩图片。
- 使用 CDN 加速图片加载。

## 小程序通道交互频次

**定义：** 过于频繁的调用 `Kit` 能力 可能会导致性能瓶颈。 <br>
**得分标准：** **≤20 次/秒** <br>
**优化建议：**

- 合理管理 `Kit` API 调用次数，避免冗余操作。

## 小程序包大小

**定义：** 小程序源码包过大影响加载速度。 <br>
**得分标准：** **未分包时 ≤2MB** <br>
**优化建议：**

- 配置分包，合理拆分代码模块。
- 静态资源采用 CDN 加载，减少源码包体积。
- 无用文件、函数、样式剔除。
