卡顿优化

2023-06-25  本文已影响0人  xxttw
image.png
CPU和GPU的工作原理

在屏幕成像的过程中,CPU和GPU起到了至关重要的作用

image.png
  1. 对象的创建和销毁
  2. 对象属性的调整frame,bound
  3. 布局的计算
  4. 文本的计算和排版
  5. 图片的格式转换和解码
  6. 图像的绘制(core graphics)
屏幕成像的原理
image.png image.png
解决卡顿的思路 尽可能的减少CPU和GPU的资源消耗, 缩短任务的处理时间,让它们能够更快的完成任务
  1. 使用轻量级的对象, 比如用不到点击事件的地方使用CALayer 渠道UIView
  2. 不要频繁的调整视图的相关属性, 比如frame,bounds等尽可能的让多次相同的操作合并为一次
  3. 提前计算好需要的布局
  4. 尽可能的减少视图的层级
  5. 减少带透明度视图的数量
  6. 复杂页面使用纯代码布局, 减少autolayout的使用, 因为autolayout需要消耗更多的CPU资源
  7. 使用懒加载, 在需要用的时候时刻再去创建
  8. 耗时的操作放到子线程去处理, 比如图片的解码和绘制, 文本尺寸的计算和绘制
  1. 尽量减少视图的数量和层级
  2. 减少带透明度的视图, 因为带透明度的视图重叠在一起往往需要更多的计算量
  3. 避免短时间内加载大量图片,尽可能的将多张图片合并成一张
  4. 尽量不要使用超大图片, GPU处理的最大纹理是4096*4096, 一旦超过这尺寸就要占用CPU资源进行处理
  5. 尽量避免出现离屏渲染,离屏渲染会在在屏幕外会新开辟一个缓冲区进行渲染, 当屏幕内缓冲区不够用后, 需要切换上下文环境到屏幕外缓冲区, 获取完帧数据之后又要切换上下文回到屏幕内缓冲区, 会造成大量的资源开销
那些操作会处理离屏渲染

光栅化 layer.shouldRasterize = YES
遮罩 layer.mask
圆角 layer.masksToBounds = YES, layer.cornerRadius > 0 可以通过CoreGraphics绘制圆角或者切圆角图片
阴影 layer.shadowxxx
如果设置了layer.shadowPath就不会产生离屏渲染

上一篇 下一篇

猜你喜欢

热点阅读