README
# 性能优化实践
一份跨平台、有技术深度、带科学求证的性能工程指南。 用统一的性能模型解释 Android / iOS / Web / 嵌入式 / 桌面的所有性能问题; 用「假设 → 度量 → 归因 → 验证 → 固化」的求证闭环替代经验主义。
# 目录介绍
- 一、专栏世界观
- 二、分卷设计原则
- 三、整体架构(六卷一体)
- 四、问题速查矩阵
- 五、目录与阅读路径
- 六、推荐阅读路径(按角色)
- 七、写作约定
- 八、跨平台统一术语
- 九、专栏建设路线
- 十、专栏现状与质量基线
- 十一、一句话总结
# 一、专栏世界观
# 1.1 解决什么问题
性能优化领域的常见痛点:
- 平台割裂:Android / iOS / Web / 嵌入式各讲各的,原理相同的问题被讲成「四套知识」。
- 经验主义:充斥「建议这样做」「通常那样会快」,缺乏可证伪的求证。
- 碎片化:今天讲 GC、明天讲火焰图,缺少统一方法论坐标系。
- 不持久:辛苦优化一轮,三个版本被业务功能堆回去。
本专栏目标:用一套方法论 + 一套指标语言 + 一套分卷体系,把上述痛点系统性解决。
# 1.2 跨平台抽象
核心命题:性能问题的「原理」是跨平台同构的,「实现」才是平台特异的。
原理(跨平台共性): 资源 × 时间 × 流水线
│
▼
实现(平台特异): ART / V8 / OC Runtime / RTOS
1
2
3
4
2
3
4
学懂任意一端的原理,迁移到其他端只需要换 API 名称。所有文章都遵循「先讲跨平台原理,再讲平台特化」的结构。
# 1.3 科学求证范式
每篇文章必须满足:
- 所有结论可证伪(带前置条件、设备、数据集)。
- 所有数字有出处(带样本量、置信区间、P50/P95/P99)。
- 所有建议有边界(什么场景成立,什么场景不成立)。
- 所有案例走完闭环(现象 → 度量 → 归因 → 求证 → 防御)。
# 1.4 与「普通性能教程」的区别
| 维度 | 普通教程 | 本专栏 |
|---|---|---|
| 视角 | 罗列平台 API | 平台无关的第一性原理 |
| 论证 | 直接给结论 | 观察 → 假设 → 实验 → 数据 → 结论 |
| 数据 | 文字描述 | 必带基准数据 / 对照实验 / 量化收益 |
| 工具 | 一两个平台工具 | 抽象成「采集源 + 分析范式」,再映射各平台 |
| 案例 | 单一平台 | 同一类问题在 Android/iOS/Web/嵌入式 同构 + 异构对比 |
# 二、分卷设计原则
# 2.1 分卷的三个维度
把内容拆成「卷」,需要在三个正交维度上找到一致切分:
| 维度 | 含义 | 是否作为分卷依据 |
|---|---|---|
| 抽象层级 | L1 系统 / L2 运行时 / L3 应用 / L4 体感 | ✅ 主维度 |
| 问题视角 | 资源(USE)/ 请求(RED)/ 体感(APDEX) | ✅ 辅维度 |
| 技术维度 | 监控 / 优化 / 防御 | ❌ 不作为分卷(每篇内部都包含三者) |
# 2.2 卷与卷的衔接关系
方法论(卷零) → 体系建设(卷一) → 资源(卷二) → 流水线(卷三) → 业务(卷四) → 交付防御(卷五)
↑ ↑ ↑ ↑ ↑ ↑
宪法 地基 L1 L2 L3 L4 边界
1
2
3
2
3
关键约定:
- 卷零是基础设施:定义术语、模型、方法论。其他卷必须引用而非重复。
- 卷一是工具地基:APM 与稳定性体系,是后续卷内「如何度量」的支撑。
- 卷二/三/四并列展开:分别从资源、流水线、业务三种视角看性能问题,互相引用。
- 卷五是边界与收口:崩溃、包体、安全、弱网 —— 性能成果安全交付的边界条件。
# 2.3 卷内文章统一骨架(科学求证 11 章模板)
00.阅读说明 → 01.问题域 → 02.第一性原理 → 03.度量与采集 → 04.归因方法
→ 05.求证实验 ⭐ → 06.优化策略 → 07.实战案例 → 08.防劣化 → 09.跨平台对照 → 10.总结
1
2
2
# 三、整体架构(六卷一体)
┌─────────────────────────────┐
│ 卷零:方法论(专栏宪法) │
│ 原理 / 指标 / 求证 / │
│ 采集 / 归因 / 防劣化 │
└─────────────┬───────────────┘
│ 被所有卷引用
▼
┌─────────────────────────────┐
│ 卷一:体系建设(地基) │
│ APM / 稳定性 / 数据治理 │
└─────────────┬───────────────┘
│ 提供基础设施
┌─────────────────────────┼─────────────────────────┐
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ 卷二:资源篇 │ │ 卷三:流水线 │ │ 卷四:业务篇 │
│ CPU / 内存 / │ │ 渲染 / FPS / │ │ 启动 / 网络 / │
│ OOM / 线程 / │ │ 卡顿 / ANR / │ │ 图片 / 列表 / │
│ 进程 / IO │ │ UI / 动画交互 │ │ 功耗 │
└────────┬───────┘ └────────┬───────┘ └────────┬───────┘
└──────────────────────┼──────────────────────┘
│
▼
┌─────────────────────────────┐
│ 卷五:交付与防御(边界) │
│ 崩溃 / 包体 / 安全 / 弱网 │
└─────────────────────────────┘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 文件结构
01.性能优化实践/
├── README.md ← 本文(专栏入口)
│
├── 00.公共方法论/ ← 卷零:宪法
│ ├── 01.性能工程总论原理.md
│ ├── 02.跨平台指标体系.md
│ ├── 03.性能求证方法论.md
│ ├── 04.数据采集与观测.md
│ ├── 05.归因方法与火焰图.md
│ ├── 06.性能预算防劣化.md
│ ├── 07.性能体系全景图.md
│ └── 08.性能优化误区集.md
│
├── 01.体系建设篇/ ← 卷一:地基
│ ├── 01.应用APM的设计.md
│ ├── 02.稳定性专项建设.md
│ └── 03.性能监控数据治理.md
│
├── 02.资源专项篇/ ← 卷二:资源 L1
│ ├── 01.CPU监控与分析.md
│ ├── 02.内存监控与治理.md
│ ├── 03.OOM与低内存治理.md
│ ├── 04.线程模型调度优化.md
│ ├── 05.进程与多进程优化.md
│ └── 06.IO与存储性能.md
│
├── 03.流水线专项/ ← 卷三:流水线 L2
│ ├── 01.渲染管线与原理.md
│ ├── 02.FPS与帧率检测.md
│ ├── 03.卡顿捕获与归因.md
│ ├── 04.ANR监控与治理.md
│ ├── 05.页面UI与布局优化.md
│ └── 06.动画交互响应优化.md
│
├── 04.业务专项篇/ ← 卷四:业务 L3
│ ├── 01.App冷启动优化.md
│ ├── 02.网络性能分析优化.md
│ ├── 03.图片性能解码优化.md
│ ├── 04.列表与滚动性能.md
│ └── 05.功耗与电量优化.md
│
└── 05.交付防御篇/ ← 卷五:交付 L4
├── 01.崩溃捕获设计实践.md
├── 02.包体积与资源治理.md
├── 03.应用安全性能权衡.md
└── 04.弱网极端环境治理.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 四、问题速查矩阵
当你遇到问题时,从下表反查;当你学习知识时,看下一章传统目录。
# 4.1 按现象反查
| 现象 | 第一线索 | 主路径 | 备选路径 | 误区 |
|---|---|---|---|---|
| 主线程 ANR | 卡顿是哪种? | 卷三·04 ANR | 卷二·06 IO(IO 阻塞型) | 看 CPU 占用低就以为不是 ANR |
| 启动慢 | 冷/温/热? | 卷四·01 冷启动 | 卷二·06 IO + 卷四·02 网络 | 盲目异步反而更慢 |
| 内存涨 | 增长率 vs 总量? | 卷二·02 内存 | 卷二·03 OOM(已触发) | 只看 PSS 不看驻留时间 |
| 列表卡 | bind 还是图片? | 卷四·04 列表 | 卷四·03 图片 | 加更多 ItemType 反而更卡 |
| 耗电高 | 前/后台? | 卷四·05 功耗 | 卷二·06 IO(后台写) | 心跳过频但不自知 |
| 帧率不稳 | 平均还是抖动? | 卷三·02 FPS | 卷三·01 渲染 | 看平均 FPS 没问题就放过 |
| 弱网卡死 | 失败还是延迟? | 卷五·04 弱网 | 卷四·02 网络 | 重试 3 次加剧雪崩 |
| 闪退/崩溃 | 必现还是偶发? | 卷五·01 崩溃 | 卷二·03 OOM | OOM 被识别为普通崩溃 |
| 滚动掉帧 | 长列表 or 动画? | 卷四·04 列表 | 卷三·06 动画 | 用 left/top 做位移 |
| 输入延迟 | 首帧慢还是反馈慢? | 卷三·06 动画交互 | 卷三·03 卡顿 | 100ms 黄金线被忽视 |
| 进程被杀 | 前/后台? | 卷二·05 进程 | 卷二·03 OOM | 多进程"以为"省内存 |
| 包体过大 | 资源 or 代码? | 卷五·02 包体积 | — | 删了字符串没删国际化 |
# 4.2 按角色反查
| 我是谁 | 我应该先看 | 我应该警惕的章节 |
|---|---|---|
| 新人开发者 | 卷零·01-03 | 跳过卷零直接看具体技术 |
| 老开发者 | 卷零·05-06 | 用经验代替求证 |
| 性能架构师 | 卷一全部 + 卷零·06 | 只关注监控不关注治理 |
| SRE/QA | 卷零·02 + 卷一·03 | 数据本身不可信而做决策 |
| 跨端开发 | 卷零·01 + 02 | 把 API 差异等同于原理差异 |
| 嵌入式 | 卷零·01 + 卷二·01/06 + 卷四·05 | 用桌面经验照搬 RTOS |
# 4.3 按工具反查
| 我手上有的工具 | 应配合的章节 |
|---|---|
| Perfetto / Systrace | 卷二·01 CPU + 卷三·03 卡顿 |
| Instruments | 卷二·02 内存 + 卷三·01 渲染 |
| Chrome DevTools | 卷三·06 动画交互 + 卷四·02 网络 |
| Charles / Wireshark | 卷四·02 网络 + 卷五·04 弱网 |
| Bugly / Crashlytics | 卷五·01 崩溃 + 卷一·02 稳定性 |
| 自研 APM | 卷一·01 APM + 卷一·03 数据治理 |
# 五、目录与阅读路径
# 0️⃣ 卷零 公共方法论(专栏宪法,必读)
后续所有主题文章都引用这 8 篇。如果只读一部分,至少把这 8 篇读完。
| 文档 | 一句话定位 |
|---|---|
| 01.性能工程总论原理 | 用「资源×时间×流水线」模型解释一切性能问题 |
| 02.跨平台指标体系 | 统一指标语言:USE / RED / APDEX + 百分位 + 行业 SLO 基准 |
| 03.性能求证方法论 | 让结论可证伪:实验设计七步法 ⭐ |
| 04.数据采集与观测 | 数据从哪里来、采得对不对、代价多大 |
| 05.归因方法与火焰图 | 自顶向下 + 自底向上的归因路径 |
| 06.性能预算防劣化 | 让优化成果「持续」的工程纪律 |
| 07.性能体系全景图 ⭐ | 整个专栏的"地图视图":分层 / 链路 / 视角 / 成熟度 |
| 08.性能优化误区集 ⭐ | 20 个被广泛犯下的认知错误,附数据反证 |
# 1️⃣ 卷一 体系建设篇(可观测性与稳定性)
| 文档 | 核心命题 |
|---|---|
| 01.应用APM的设计 | 可观测性 = 性能工程的地基 |
| 02.稳定性专项建设 | 稳定性是性能的边界条件 |
| 03.性能监控数据治理 | 数据本身需要被治理:跨端口径、采集偏差、可决策性 |
# 2️⃣ 卷二 资源专项篇(CPU / 内存 / 线程 / 进程 / IO)
| 文档 | 核心命题 |
|---|---|
| 01.CPU监控与分析 | CPU 高 ≠ 慢,等待才是慢 |
| 02.内存监控与治理 | 内存的时间维度比空间维度重要 |
| 03.OOM与低内存治理 | OOM 是内存治理失败的兜底信号 |
| 04.线程模型调度优化 | 线程是用 CPU 兑换延迟的工具 |
| 05.进程与多进程优化 | 进程是隔离单元,也是性能边界 |
| 06.IO与存储性能 | IO 是 off-CPU 等待的最大来源 |
# 3️⃣ 卷三 流水线专项(渲染 / FPS / 卡顿 / ANR / UI / 动画)
| 文档 | 核心命题 |
|---|---|
| 01.渲染管线与原理 | 渲染是固定截止时间的流水线 |
| 02.FPS与帧率检测 | FPS 不是均值游戏,而是抖动游戏 |
| 03.卡顿捕获与归因 | 卡顿是流水线阻塞的可观测投影 |
| 04.ANR监控与治理 | ANR 是卡顿的极端形态 |
| 05.页面UI与布局优化 | UI 优化的本质是减少帧产出成本 |
| 06.动画交互响应优化 | 交互延迟比 FPS 更敏感 |
# 4️⃣ 卷四 业务专项篇(启动 / 网络 / 图片 / 列表 / 功耗)
| 文档 | 核心命题 |
|---|---|
| 01.App冷启动优化 | 启动 = 关键路径上的最优化问题 |
| 02.网络性能分析优化 | 网络性能 = 协议效率 + 业务调度 |
| 03.图片性能解码优化 | 图片是带宽 / 内存 / CPU 三资源耦合点 |
| 04.列表与滚动性能 | 滚动是 60fps 流水线的极限考验 |
| 05.功耗与电量优化 | 性能的另一面:单位功耗能跑多远 |
# 5️⃣ 卷五 交付防御篇(崩溃 / 包体 / 安全 / 弱网)
| 文档 | 核心命题 |
|---|---|
| 01.崩溃捕获设计实践 | 崩溃是性能体系的最后一道防线 |
| 02.包体积与资源治理 | 包体积是冷启动 / 安装转化的瓶颈 |
| 03.应用安全性能权衡 | 安全是性能 / 稳定性的隐形成本 |
| 04.弱网极端环境治理 | 实验室数据 ≠ 真实用户环境 |
# 六、推荐阅读路径(按角色)
# 🟢 跨端开发者(推荐画像)
「我做 Android / iOS / Web / 嵌入式,希望磨平差异学通用思路」
卷零(必读)
↓
卷一(建立体系认知)
↓
按当前最痛的问题域选卷:
· 资源痛点 → 卷二
· 卡顿痛点 → 卷三
· 业务场景 → 卷四
· 上线问题 → 卷五
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 🟡 单平台开发者
卷零 第 1-2 篇(建立通用语言)
↓
按需进入对应卷
↓
回头读卷零剩余方法论
1
2
3
4
5
2
3
4
5
# 🔴 性能架构师
卷零 全部 → 卷一 全部 → 卷零·06 防劣化
↓
建设 SLO / Budget / CI 卡口体系
↓
按需引用其他卷
1
2
3
4
5
2
3
4
5
# 🟣 嵌入式开发者
卷零(必读,特别是 资源×时间×流水线 模型)
↓
卷二·01 CPU、卷二·06 IO、卷四·05 功耗
↓
其他卷按需引用
1
2
3
4
5
2
3
4
5
# 七、写作约定
# 7.1 表达规范
- ❌ 禁止「一般来说」「通常」「大概」等模糊表述。
- ✅ 必须 标注测试环境(设备/版本/网络/数据集)。
- ✅ 必须 给出**百分位(P50/P90/P99)**而非均值。
- ✅ 必须 在每个建议后注明反例 / 适用边界。
# 7.2 数据规范
- 任何数字结论需附 样本量 + 置信区间。
- 性能比较使用 CDF 曲线 + 直方图。
- 实验结论必须可被他人复刻。
# 7.3 图示规范
每篇至少包含:
- 1 张第一性原理模型图(资源×时间×流水线)
- 1 张跨平台对照矩阵
- 1 张归因决策树
- 1 张优化前后数据对比图(带置信区间)
# 八、跨平台统一术语
后续章节出现这些词时,默认指统一术语,再视情况下钻到平台特化。
| 统一术语 | Android | iOS | Web | 嵌入式 |
|---|---|---|---|---|
| 主线程 | UI Thread | Main Thread | Main JS Thread | UI Task |
| 帧时钟 | Vsync / Choreographer | CADisplayLink | rAF | 显示 IRQ |
| 任务队列 | MessageQueue | RunLoop sources | Task Queue | OS Queue |
| 内存回收 | ART GC | ARC | V8 GC | free / 引用计数 |
| 渲染管线 | Measure→Layout→Draw→Composite | Layout→Display→Composite | Style→Layout→Paint→Composite | 自定义 |
| 采样器 | Tracepoint / perfetto | os_signpost / Instruments | Performance API | ftrace / lttng |
# 九、专栏建设路线
按风险递增、收益递增的顺序分四阶段:
# P1 立柱阶段 ✅ 已完成
- 卷零 6 篇方法论
- README 阅读地图
- 整体方案设计
# P2 标杆重构 ✅ 已完成
按 11 章模板完整重写,作为后续模板:
| 候选 | 卷归属 | 推荐理由 |
|---|---|---|
| CPU 监控与分析 | 卷二 | 资源类代表,方法论密度高 |
| 渲染管线与原理 | 卷三 | 流水线类代表,跨端同构性最强 |
| App 冷启动优化 | 卷四 | 业务类代表,关键路径分析最直观 |
# P3 批量重构 ✅ 已完成
- 按卷推进剩余文章重构
- 完成 6 篇新增正文(数据治理 / IO / 动画 / 列表 / 功耗 / 弱网)
# P4 联动打磨 🟡 进行中
- 交叉引用、对照速查、阅读路径打磨
- 持续添加跨端实测数据
- 收集线上典型案例补入「实战案例」章节
# 十、专栏现状与质量基线
# 10.1 完成度
| 卷 | 篇数 | 状态 |
|---|---|---|
| 卷零 公共方法论 | 8 | ✅ |
| 卷一 体系建设篇 | 3 | ✅ |
| 卷二 资源专项篇 | 6 | ✅ |
| 卷三 流水线专项 | 6 | ✅ |
| 卷四 业务专项篇 | 5 | ✅ |
| 卷五 交付防御篇 | 4 | ✅ |
| 合计 | 32 | 24 篇专项 + 8 篇方法论 |
# 10.2 质量基线
每篇都满足:
- ✅ 11 章固定结构
- ✅ 二/三级标题字数受控
- ✅ 跨平台同构论证 + 平台差异矩阵
- ✅ 三类采集方案的本质拆解
- ✅ §5 完整三个求证实验(九步骤探索叙事)
- ✅ 跨端 + 平台特异两个案例
- ✅ 防劣化三道防线 + SLO
- ✅ 0 lint 问题
# 十一、一句话总结
方法论是宪法(卷零),体系是地基(卷一),资源 / 流水线 / 业务是三视角(卷二/三/四),交付防御是边界(卷五)。 六卷一体,不缺不冗,跨端同构,求证可信。
上次更新: 2026/06/07, 10:26:12