初识性能优化及工具 | 青训营笔记

108 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

课程笔记

01为什么要做性能优化

  • 了解性能优化与业务发展之间的关系

    • Android发展至今,各项基础设施非常完善的情况下,我们越来越重视App的性能优化,以及用户体验,这关乎一个线上应用的业务数据持续增长的基础,以及用户口碑的问题
  • PC平台和移动平台的硬件性能优化的发展历程

    • 通过x86平台和arm平台的发展历史,来展望性能优化
  • 在长时间的历史范围内看整体的优化趋势和软件优化能带来的优势

    • 硬件与软件的结合也是最佳的体验的基础
  • 用实际的例子介绍性能优化的必要性

    • Talk is cheap

02性能优化是什么

2.1性能优化的目标是什么?

快:最快显示效率、最快网络速率、最快UI响应

稳:最佳用户体验,减少强打断

省:最低存储、最低功耗、最低流量消耗、最低计算资源

2.2广义的性能优化分类

流畅度、资源、稳定性、系统级

2.3流畅度优化基础介绍

Google 定义:界面呈现是指从应用生成帧并将其显示在屏幕上的动作。要确保用户能够流畅地与应用互动,应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度(为什么是 60fps?)。 如果应用存在界面呈现缓慢的问题,系统会不得不跳过一些帧,这会导致用户感觉应用不流畅,我们将这种情况称为卡顿。


作者:青训营官方账号
链接:juejin.cn/post/712352… 来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2.4稳定性优化基础介绍

当性能劣化累积到一定程度,就变成了稳定性问题,直接强制打断应用的使用体验。

2.5系统级优化基础介绍

如何充分利用应用程序和系统程序,综合提升应用的性能表现。有哪些可以挖掘的点。

03最佳优化选型

3.1 性能监控工具的价值

App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。

3.2 Gpu呈现模式

image.png

Layertool

抖音自研工具,快速识别图层及过度绘制、绘制区域过大等问题,提升整体渲染效率.

image.png

其他

  • CPU Profile
  • TraceView
  • Systrace
  • Battery Historian

04性能优化技术案例

4.1拆解View显示流程中的耗时成因

  • UI 构建

    • 在UI构建阶段中首先要对界面布局的xml文件进行解析,这会导致IO Wait耗时,在接下来要解析xml文件中的TagName从而获取对应View的class会用到反射、创建各子View实例并生成View树又会用到循环递归,两部分都会增加CPU Time的开销。
  • 数据绑定

    • 然后是数据绑定阶段,该阶段主要分两部分,一部分是对数据做请求、解析、适配,另一是部分是将适配好的数据填充进UI中,前一部分往往会涉及到Json解析成Data Class实例,这里就可能涉及反射、循环遍历嵌套的数据类结构等增加CPU Time的操作。
  • View显示

    • 最后是View显示阶段,常见的measure、layout、draw三大渲染View的步骤就在其中,它们同样会产生递归遍历父子View的耗时,此外这里还涉及将应用层计算好的渲染View的数据传递给系统层做最终的像素点排布,那么必然又会产生IPC耗时

课后总结

性能优化是什么?(what)

  • 流畅性优化

  • 资源优化

  • 稳定性优化

  • 系统级优化

如何做性能优化?(how)

  • 性能优化三部曲

  • 性能拆解归因介绍

  • view构建优化案例分享

  • 解析优化案例分享

  • 异步渲染案例分享

思考:为什么应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度?

16ms 意味着 1000/60hz,相当于 60fps。这是因为人眼与大脑之间的协作无法感知超过 60fps 的画面更新。24fps 使得人眼感知的是连续线性的运动,这其实是归功于运动模糊的效果。 24fps 是电影胶圈通常使用的帧率,因为这个帧率已经足够支撑大部分电影画面需要表达的内容,同时能够最大的减少费用支出。 但是低于 30fps 是 无法顺畅表现绚丽的画面内容的,此时就需要用到 60fps。