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

149 阅读2分钟

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

初识性能优化及工具

为什么做性能优化

性能优化带来体验的改善,进而帮助业务指标的提升

性能优化是什么

目标:快、稳、省资源,省空间

分类:

  • 1.流畅性优化 快-极致的响应与流畅的体验

卡顿原因:

  1. 由于前面的代码响应导致滑动屏幕无效
  2. 响应了屏幕滑动,但是输入时间太长
  3. 其他原因导致丢帧 解决方法:尽可能将耗时线程移出主线程执行,让主线程只负责交互与刷新
  • 2.资源优化 省-最小负载带来最大收益

image.png

  • 3.稳定性优化 稳-稳定的实现,减少不必要打断

ANR:应用程序无响应 如果Android应用的界面线程处于阻塞状态的时间过长,会触发App ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR对话框会为用户提供强行退出应用或等待的选项。

image.png

  • 4.系统级优化 扩展-底层booster

最佳性能工具选型

性能监控价值:

  • 监控和优化相生相伴
  • 监控有攻也有防
  • 攻是为了发现现有问题,指导优化方向
  • 防是为了发现劣化问题,及时止损
  • 线上监控发现问题并聚合排序,线下监控作为线上辅助,并发版前置发现问题 GPU呈现模式

原理:系统通过记录每一帧的相关数据,然后通过图形的形式呈现,但并不完全准确且无法明确指出造成卡顿问题的具体原因

Layertool

原理:通过遍历ViewTree信息,输出View层级关系

VOU Profiler

原理:基于JVMTI,上手简单但性能损耗太大

TraceView

Instrument:虚拟监听函数入口回调 Sample:通过定时焯去多次堆栈diff,近似确定函数的进入和退出时间

Systrace

如何做性能优化

现状分析————耗时原因

  • CPU Time:循环,反射,序列化/反序列化,类解析
  • IO Wait:IO操作,等待IO返回结果
  • IPC:Binder调用耗时
  • Lock Wait:主线程是等锁状态,等待其他线程或者自己超时唤醒
  • CPU Schedule:主线程是可执行状态,但是获取不到CPU时间片

现状分析————运行环境归因

  • 根据耗时成因归类
  • 根据运行所在线程环境采取不用的策略

现状分析————渲染分析

采用具体的策略优化

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