这是我参与「第四届青训营 」笔记创作活动的第6天。
以下是第七堂课的笔记和总结
初始性能优化及工具
为什么性能做性能优化
硬件性能提升速度变缓
软件的性能优化仍可持续带来提升
性能优化是什么
流畅性优化
界面刷新如:60帧,16ms刷新一次(使用VSync信号)
卡顿来源:
- delay(输入延迟),代码导致
- 输入后代码处理逻辑过长导致丢帧
- 页面UI处理等耗时过长,导致丢帧
解决:将耗时操作放到其他线程
资源优化
端侧资源:功耗,内存、存储,CPU,电量,网络,音量等。
服务则资源:CDN带宽,API流量
稳定性优化
Crash(崩溃)
Timeout(超时):UI Jank(卡顿掉帧)、ANR(应用无响应)
系统级优化
移动操作系统和硬件厂商的性能优化
最佳性能工具选型(略)
-
布局问题:
Layertool(抖音自研)
-
性能归因:
CPU Profiler
TraceView
Systrace
-
btrace(aka rhea)- 进阶
-
功耗
battery Historian
如何做性能优化
-
现状分析
找到耗时成因
-
CPU Time
循环、反射,序列化/反序列化,类解析
-
IO Wait
IO操作,等待IO返回结果
-
IPC
Binder调用耗时
-
Lock Wait
主线程是等锁状态,等待其他线程或者自己超时唤醒
-
CPU Schedule
主线程是可执行状态,但是获取不到CPU时间片
根据运行所在线程环境采用不同的策略
渲染分析
-
-
优化策略
-
UI-构建解决方案
耗时成因:xml IO、class反射、创建view、Asset资源大锁
官方解决方案:AsyncLayoutInflater(随时随地预加载)
-
渲染耗时优化
移除不必要布局,修改不合理布局,写高效合理的布局,移除默认Windows背景,绘制层级优化
-
异步渲染
- SurfaceView
- Jetpack Compose
- Litho
-
总结
这堂课主要讲解了在移动端开发时,经常需要考虑到性能优化。本节课讲解了多个可以优化的方面,以及不同的优化方案。接着针对不同场景的性能优化,介绍了许多高效的性能工具。最后,对于性能优化的步骤,讲解了几个性能优化案例。