这是我参与「第四届青训营」笔记创作活动的第8天
课程主要内容
- 为什么做性能优化?
- 性能优化是什么?
- 最佳性能工具选型
- 如何做性能优化?
1. 为什么要做性能优化?
-
从业务角度来看:
- 性能优化带来体验的改善进而帮助业务指标的提升
-
从更长的时间范围来看:
- 硬件性能提升速度变缓
- ARM平台受益于架构和工艺的演进,最近几年趋势比X86平台好
-
从更长的时间范围来看:
- 多核带来的提升取决于可以真正并行执行的部分
-
未来?
- 未来会有新的材料和工艺来驱动芯片性能的进一步提升,但是目前还没有成熟
- 移动处理器还受到电池技术的限制
- 软件的性能优化仍可持续带来提升
2. 性能优化是什么?
性能优化的主要目标
性能即体验
- 快:最快显示效率、最快网络速率、最快UI响应
- 稳:最佳用户体验,减少强打断
- 省:最低存储、最低功耗、最低流量消耗、最低计算资源
性能优化分类
- 流畅性优化
- 快-极致的响应与流畅的体验
- 资源优化
- 省-最小负载带来最大的收益
- 稳定性优化
- 稳-稳定的实现,减少不必要打断
- 系统级优化
- 拓展-底层booster
流畅性优化
Android的线程结构
我们的代码影响主要影响: System Events、Input Events、Application、Services、Alarm
界面刷新: 保证在16ms甚至更短的时间内完成绘制。
卡顿感知的产生:
- 我们的输入事件无法及时响应(划不动)。
- 输入事件的耗时比较长(划的时候卡卡的)。
- 很多任务都是在主线程做的。
解决卡顿: 把耗时操作移到其他线程操作,主线程只为交互和刷新负责。
人肉眼能感知到的不卡顿的最低帧数是:25帧
如果没有vsync信号会产生画面撕裂。
资源优化
资源: 即Android手机的软件和硬件资源,通俗意义上应用依赖的移动终端的有限资源和系统设置的数值,即功耗、存储、流量、系统参数、CPU、内存等。
资源优化:
- 端侧资源 (功耗、内存、存储、CPU、GPU、网络、音量、亮度、etc……)
- 服务侧资源 (CDN带宽、API流量)
稳定性优化
稳定性:
- 崩溃 Crash
- 超时 Timeout (UI Jank卡顿掉帧、ANR应用无响应)
ANR是(Application Not Responding)的缩写,即应用程序无响应。如果Android应用的界面线程处于阻塞状态的时间过长,会触发App ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR对话框会为用户提供强行退出应用或等待的选项。
系统级优化
充分利用应用程序和系统程序,综合提升应用的性能表现。
后记
通过今天课程的学习,我学习了做性能优化的原因以及什么是性能优化,了解了性能优化的主要目标和分类,为性能监控工具的学习做好准备。