性能优化 | 青训营笔记

181 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第13天。本文主要对性能优化课程做出梳理,也对性能优化有一个入门认知:包括性能优化的覆盖点、主要着重点与优化思想。

why

  1. 硬件性能速度变还

  2. ARM平台受益于架构和工艺的严谨,最近几年趋势比x86平台好

  3. 多核带来的提升取决于可以真正并行执行的部分(软件可以持续性优化)

  4. 。。。

目标(性能即体验)

  • :最快显示效率、最快网络速率、最快UI响应
  • :最佳用户体验,减少强打断(例如游戏)
  • :最低存储、最低功耗、最低流量消耗、最低计算资源(例如边下载边删除)

一、流畅性优化

image.png

刷新

image.png 关键词:每帧的时间不应超过16ms,以达到每秒60fps(60帧)的呈现速度。 卡顿:应用存在界面呈现缓慢的问题,系统选择掉过一些帧,这导致了用户感觉感觉不流畅,也就是卡顿。

image.png

image.png

解决

让耗时操作移到其他线程工作,让主线程只为交互(输入输出)刷新(UI绘制)负责。

image.png

  • 最低25帧时不感觉到卡顿。

16ms:1000/60hz,相当于60fps。人眼与大脑之间的写作无法感知超过60fps的画面更新。

12fps 大概类似手动快速翻动书籍的帧率, 这明显是可以感知到不够顺滑的。24fps 使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的效果。 24fps 是电影胶圈通常使用的帧率,因为这个帧率已经足够支撑大部分电影画面需要表达的内容,同时能够最大的减少费用支出。 但是低于 30fps 是 无法顺畅表现绚丽的画面内容的,此时就需要用到 60fps 来达到想要的效果,超过 60fps 就没有必要了。如果我们的应用没有在 16ms 内完成屏幕刷新的全部逻辑操作,就会发生卡顿。

image.png 答案:A

画面撕裂:一帧渲染完而不是CPU读入一帧后

二、资源优化

image.png

最大化资源调度:最大资源调度分为两个方向,第一个方向将一些有限资源尽量向最影响体验的方向靠拢,首先要满足,我们需要在网络、渲染等领域提供更多的资源。第二个方向,探寻更多的资源供给,首先要满足,深度剖析系统资源使用,需要从系统层榨取更多的可用资源,也需要从用户敏感角度榨取更多资源,最终实现最大化资源调度。

最小化资源使用:需要对持续性的指标影响降到最低,首先要满足,我们对功耗、存储、流量等指标在一些用户敏感度大于实际获得的体验的环境下,保障核心功能的体验。本质的原则就是保证业务基本面的前提下,通过降级或者优化等手段,将占用的资源做到最小。

资源优化分类:

image.png 用户上传的音频不同,上传后后台对其进行平衡。

三、稳定性

性能劣化->强制打断应用的使用体验。

image.png

四、系统级优化

image.png

  • 2015ART后,流畅性提升
  • 2018预编译后下发,关注性能与功耗的平衡问题

image.png

最佳工具选型

[GPU呈现模式](【Android 客户端专场 学习资料三】第四届字节跳动青训营 - 掘金 (juejin.cn))

- Layertool
- CPU Profiler
- TraceView
    - 时间轴窗格
    - 分析窗格
- Systrace 在系统一级运行的所有进程的时间信息。
- btrace-进阶
- Battery Historian

性能优化技术案例

性能监控价值 image.png

GPU呈现模式

image.png

Layertool

LayerTool工具:根据自定义需求过各个布局,然后在界面上提示对应的位置,可以有效查找导致overdraw的布局。 背景,实物绘制 image.png

CPU Profiler image.png

TraceView 间隔太长函数抓取不到 image.png

image.png

Systrace

抓取耗时点 image.png

image.png

image.png

原生工具

Battery Historian

image.png

image.png

image.png

性能优化

现状分析

  1. CPU Time:占用CPU进行计算所花费的时间绝对值
  2. CPU Schedule
  3. IO Wait
  4. Lock Wait
  5. IPC 进程间通信

image.png 不要在主线程做IO操作等等

  • 主线程优化
  • 运行环境归因
    1. 前台运行
    2. 后台运行
  • 后台线程优化

优化案例分享

耗时归因方式

image.png

渲染分析

image.png

View显示流程耗时因素

  • 1
    • UI
    • 数据绑定
    • View显示

image.png 答案:ABCD

image.png

UI构建的优化方案

image.png 将所有耗时操作放在另一边

image.png

数据绑定的优化方案

渲染和布局优化方案

image.png

渲染优化的异步化方案

image.png

image.png

优化书籍推荐:网上系列文档(抖音)、具体问题具体分析的(看源码)