编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 性能优化实践

    • README
      • 目录介绍
      • 一、专栏世界观
        • 1.1 解决什么问题
        • 1.2 跨平台抽象
        • 1.3 科学求证范式
        • 1.4 与「普通性能教程」的区别
      • 二、分卷设计原则
        • 2.1 分卷的三个维度
        • 2.2 卷与卷的衔接关系
        • 2.3 卷内文章统一骨架(科学求证 11 章模板)
      • 三、整体架构(六卷一体)
        • 文件结构
      • 四、问题速查矩阵
        • 4.1 按现象反查
        • 4.2 按角色反查
        • 4.3 按工具反查
      • 五、目录与阅读路径
        • 0️⃣ 卷零 公共方法论(专栏宪法,必读)
        • 1️⃣ 卷一 体系建设篇(可观测性与稳定性)
        • 2️⃣ 卷二 资源专项篇(CPU / 内存 / 线程 / 进程 / IO)
        • 3️⃣ 卷三 流水线专项(渲染 / FPS / 卡顿 / ANR / UI / 动画)
        • 4️⃣ 卷四 业务专项篇(启动 / 网络 / 图片 / 列表 / 功耗)
        • 5️⃣ 卷五 交付防御篇(崩溃 / 包体 / 安全 / 弱网)
      • 六、推荐阅读路径(按角色)
        • 🟢 跨端开发者(推荐画像)
        • 🟡 单平台开发者
        • 🔴 性能架构师
        • 🟣 嵌入式开发者
      • 七、写作约定
        • 7.1 表达规范
        • 7.2 数据规范
        • 7.3 图示规范
      • 八、跨平台统一术语
      • 九、专栏建设路线
        • P1 立柱阶段 ✅ 已完成
        • P2 标杆重构 ✅ 已完成
        • P3 批量重构 ✅ 已完成
        • P4 联动打磨 🟡 进行中
      • 十、专栏现状与质量基线
        • 10.1 完成度
        • 10.2 质量基线
      • 十一、一句话总结
    • 公共方法论

    • 体系建设篇

    • 资源专项篇

    • 流水线专项

    • 业务专项篇

    • 交付防御篇

  • 程序编程原理

  • 稳定性与可靠性

  • 工程化与运维

  • 方案设计思想

  • 专栏
  • 性能优化实践
杨充
2026-05-27
目录

README

# 性能优化实践

一份跨平台、有技术深度、带科学求证的性能工程指南。 用统一的性能模型解释 Android / iOS / Web / 嵌入式 / 桌面的所有性能问题; 用「假设 → 度量 → 归因 → 验证 → 固化」的求证闭环替代经验主义。


# 目录介绍

  • 一、专栏世界观
  • 二、分卷设计原则
  • 三、整体架构(六卷一体)
  • 四、问题速查矩阵
  • 五、目录与阅读路径
  • 六、推荐阅读路径(按角色)
  • 七、写作约定
  • 八、跨平台统一术语
  • 九、专栏建设路线
  • 十、专栏现状与质量基线
  • 十一、一句话总结

# 一、专栏世界观

# 1.1 解决什么问题

性能优化领域的常见痛点:

  • 平台割裂:Android / iOS / Web / 嵌入式各讲各的,原理相同的问题被讲成「四套知识」。
  • 经验主义:充斥「建议这样做」「通常那样会快」,缺乏可证伪的求证。
  • 碎片化:今天讲 GC、明天讲火焰图,缺少统一方法论坐标系。
  • 不持久:辛苦优化一轮,三个版本被业务功能堆回去。

本专栏目标:用一套方法论 + 一套指标语言 + 一套分卷体系,把上述痛点系统性解决。

# 1.2 跨平台抽象

核心命题:性能问题的「原理」是跨平台同构的,「实现」才是平台特异的。

原理(跨平台共性):    资源 × 时间 × 流水线
                          │
                          ▼
实现(平台特异):   ART / V8 / OC Runtime / RTOS

学懂任意一端的原理,迁移到其他端只需要换 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 边界

关键约定:

  • 卷零是基础设施:定义术语、模型、方法论。其他卷必须引用而非重复。
  • 卷一是工具地基:APM 与稳定性体系,是后续卷内「如何度量」的支撑。
  • 卷二/三/四并列展开:分别从资源、流水线、业务三种视角看性能问题,互相引用。
  • 卷五是边界与收口:崩溃、包体、安全、弱网 —— 性能成果安全交付的边界条件。

# 2.3 卷内文章统一骨架(科学求证 11 章模板)

00.阅读说明 → 01.问题域 → 02.第一性原理 → 03.度量与采集 → 04.归因方法
→ 05.求证实验 ⭐ → 06.优化策略 → 07.实战案例 → 08.防劣化 → 09.跨平台对照 → 10.总结

# 三、整体架构(六卷一体)

                    ┌─────────────────────────────┐
                    │  卷零:方法论(专栏宪法)    │
                    │  原理 / 指标 / 求证 /       │
                    │  采集 / 归因 / 防劣化       │
                    └─────────────┬───────────────┘
                                  │ 被所有卷引用
                                  ▼
                    ┌─────────────────────────────┐
                    │  卷一:体系建设(地基)     │
                    │  APM / 稳定性 / 数据治理    │
                    └─────────────┬───────────────┘
                                  │ 提供基础设施
        ┌─────────────────────────┼─────────────────────────┐
        ▼                         ▼                         ▼
┌────────────────┐     ┌────────────────┐     ┌────────────────┐
│ 卷二:资源篇   │     │ 卷三:流水线   │     │ 卷四:业务篇   │
│ CPU / 内存 /   │     │ 渲染 / FPS /   │     │ 启动 / 网络 /  │
│ OOM / 线程 /   │     │ 卡顿 / ANR /   │     │ 图片 / 列表 /  │
│ 进程 / IO      │     │ UI / 动画交互  │     │ 功耗           │
└────────┬───────┘     └────────┬───────┘     └────────┬───────┘
         └──────────────────────┼──────────────────────┘
                                │
                                ▼
                    ┌─────────────────────────────┐
                    │ 卷五:交付与防御(边界)     │
                    │ 崩溃 / 包体 / 安全 / 弱网   │
                    └─────────────────────────────┘

# 文件结构

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

# 四、问题速查矩阵

当你遇到问题时,从下表反查;当你学习知识时,看下一章传统目录。

# 4.1 按现象反查

现象 第一线索 主路径 备选路径 误区
主线程 ANR 卡顿是哪种? 卷三·04 ANR (opens new window) 卷二·06 IO (opens new window)(IO 阻塞型) 看 CPU 占用低就以为不是 ANR
启动慢 冷/温/热? 卷四·01 冷启动 (opens new window) 卷二·06 IO (opens new window) + 卷四·02 网络 (opens new window) 盲目异步反而更慢
内存涨 增长率 vs 总量? 卷二·02 内存 (opens new window) 卷二·03 OOM (opens new window)(已触发) 只看 PSS 不看驻留时间
列表卡 bind 还是图片? 卷四·04 列表 (opens new window) 卷四·03 图片 (opens new window) 加更多 ItemType 反而更卡
耗电高 前/后台? 卷四·05 功耗 (opens new window) 卷二·06 IO (opens new window)(后台写) 心跳过频但不自知
帧率不稳 平均还是抖动? 卷三·02 FPS (opens new window) 卷三·01 渲染 (opens new window) 看平均 FPS 没问题就放过
弱网卡死 失败还是延迟? 卷五·04 弱网 (opens new window) 卷四·02 网络 (opens new window) 重试 3 次加剧雪崩
闪退/崩溃 必现还是偶发? 卷五·01 崩溃 (opens new window) 卷二·03 OOM (opens new window) OOM 被识别为普通崩溃
滚动掉帧 长列表 or 动画? 卷四·04 列表 (opens new window) 卷三·06 动画 (opens new window) 用 left/top 做位移
输入延迟 首帧慢还是反馈慢? 卷三·06 动画交互 (opens new window) 卷三·03 卡顿 (opens new window) 100ms 黄金线被忽视
进程被杀 前/后台? 卷二·05 进程 (opens new window) 卷二·03 OOM (opens new window) 多进程"以为"省内存
包体过大 资源 or 代码? 卷五·02 包体积 (opens new window) — 删了字符串没删国际化

# 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 (opens new window) + 卷三·03 卡顿 (opens new window)
Instruments 卷二·02 内存 (opens new window) + 卷三·01 渲染 (opens new window)
Chrome DevTools 卷三·06 动画交互 (opens new window) + 卷四·02 网络 (opens new window)
Charles / Wireshark 卷四·02 网络 (opens new window) + 卷五·04 弱网 (opens new window)
Bugly / Crashlytics 卷五·01 崩溃 (opens new window) + 卷一·02 稳定性 (opens new window)
自研 APM 卷一·01 APM (opens new window) + 卷一·03 数据治理 (opens new window)

# 五、目录与阅读路径

# 0️⃣ 卷零 公共方法论(专栏宪法,必读)

后续所有主题文章都引用这 8 篇。如果只读一部分,至少把这 8 篇读完。

文档 一句话定位
01.性能工程总论原理 (opens new window) 用「资源×时间×流水线」模型解释一切性能问题
02.跨平台指标体系 (opens new window) 统一指标语言:USE / RED / APDEX + 百分位 + 行业 SLO 基准
03.性能求证方法论 (opens new window) 让结论可证伪:实验设计七步法 ⭐
04.数据采集与观测 (opens new window) 数据从哪里来、采得对不对、代价多大
05.归因方法与火焰图 (opens new window) 自顶向下 + 自底向上的归因路径
06.性能预算防劣化 (opens new window) 让优化成果「持续」的工程纪律
07.性能体系全景图 (opens new window) ⭐ 整个专栏的"地图视图":分层 / 链路 / 视角 / 成熟度
08.性能优化误区集 (opens new window) ⭐ 20 个被广泛犯下的认知错误,附数据反证

# 1️⃣ 卷一 体系建设篇(可观测性与稳定性)

文档 核心命题
01.应用APM的设计 (opens new window) 可观测性 = 性能工程的地基
02.稳定性专项建设 (opens new window) 稳定性是性能的边界条件
03.性能监控数据治理 (opens new window) 数据本身需要被治理:跨端口径、采集偏差、可决策性

# 2️⃣ 卷二 资源专项篇(CPU / 内存 / 线程 / 进程 / IO)

文档 核心命题
01.CPU监控与分析 (opens new window) CPU 高 ≠ 慢,等待才是慢
02.内存监控与治理 (opens new window) 内存的时间维度比空间维度重要
03.OOM与低内存治理 (opens new window) OOM 是内存治理失败的兜底信号
04.线程模型调度优化 (opens new window) 线程是用 CPU 兑换延迟的工具
05.进程与多进程优化 (opens new window) 进程是隔离单元,也是性能边界
06.IO与存储性能 (opens new window) IO 是 off-CPU 等待的最大来源

# 3️⃣ 卷三 流水线专项(渲染 / FPS / 卡顿 / ANR / UI / 动画)

文档 核心命题
01.渲染管线与原理 (opens new window) 渲染是固定截止时间的流水线
02.FPS与帧率检测 (opens new window) FPS 不是均值游戏,而是抖动游戏
03.卡顿捕获与归因 (opens new window) 卡顿是流水线阻塞的可观测投影
04.ANR监控与治理 (opens new window) ANR 是卡顿的极端形态
05.页面UI与布局优化 (opens new window) UI 优化的本质是减少帧产出成本
06.动画交互响应优化 (opens new window) 交互延迟比 FPS 更敏感

# 4️⃣ 卷四 业务专项篇(启动 / 网络 / 图片 / 列表 / 功耗)

文档 核心命题
01.App冷启动优化 (opens new window) 启动 = 关键路径上的最优化问题
02.网络性能分析优化 (opens new window) 网络性能 = 协议效率 + 业务调度
03.图片性能解码优化 (opens new window) 图片是带宽 / 内存 / CPU 三资源耦合点
04.列表与滚动性能 (opens new window) 滚动是 60fps 流水线的极限考验
05.功耗与电量优化 (opens new window) 性能的另一面:单位功耗能跑多远

# 5️⃣ 卷五 交付防御篇(崩溃 / 包体 / 安全 / 弱网)

文档 核心命题
01.崩溃捕获设计实践 (opens new window) 崩溃是性能体系的最后一道防线
02.包体积与资源治理 (opens new window) 包体积是冷启动 / 安装转化的瓶颈
03.应用安全性能权衡 (opens new window) 安全是性能 / 稳定性的隐形成本
04.弱网极端环境治理 (opens new window) 实验室数据 ≠ 真实用户环境

# 六、推荐阅读路径(按角色)

# 🟢 跨端开发者(推荐画像)

「我做 Android / iOS / Web / 嵌入式,希望磨平差异学通用思路」

卷零(必读)
  ↓
卷一(建立体系认知)
  ↓
按当前最痛的问题域选卷:
  · 资源痛点 → 卷二
  · 卡顿痛点 → 卷三
  · 业务场景 → 卷四
  · 上线问题 → 卷五

# 🟡 单平台开发者

卷零 第 1-2 篇(建立通用语言)
  ↓
按需进入对应卷
  ↓
回头读卷零剩余方法论

# 🔴 性能架构师

卷零 全部 → 卷一 全部 → 卷零·06 防劣化
  ↓
建设 SLO / Budget / CI 卡口体系
  ↓
按需引用其他卷

# 🟣 嵌入式开发者

卷零(必读,特别是 资源×时间×流水线 模型)
  ↓
卷二·01 CPU、卷二·06 IO、卷四·05 功耗
  ↓
其他卷按需引用

# 七、写作约定

# 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/26, 19:34:59
README
性能工程总论原理

← README 性能工程总论原理→

最近更新
01
CSS选择器入门
06-23
02
CSS盒模型详解
06-23
03
CSS定位与层级
06-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式