美文网首页
性能调优

性能调优

作者: Jean_Lina | 来源:发表于2020-11-04 18:04 被阅读0次

CPU:中央处理器
对象的创建和销毁
对象属性的调整

布局计算
文本的计算和排版

图片的格式转换和解码
图像的绘制

GPU:图形处理器
纹理的渲染


截屏2020-11-04 上午11.24.11.png

卡顿解决的主要思路:
(1)尽可能减少CPU、GPU的资源消耗。
(2)按照60FPS的刷新帧率,每隔16ms就会有一个VSync垂直同步信号。

CPU的优化:
(1)尽量使用轻量级的对象,用不到事件处理的地方,可以考虑使用CALayer替代UIView。
(2)不要频繁地调用UIView的相关属性,比如frame、bounds、transform属性,尽量减少不必要的更改。
(3)尽量提前计算好布局,在需要时一次性调整对应的属性,不要多次修改属性。
(4)Autolayout会比直接设置frame消耗更多的CPU资源。
(5)图片的size最好跟UIImageView的size保持一致。
(6)控制一下线程的最大并发数量。
(7)尽量把耗时的操作放到子线程。
文本处理(尺寸计算、绘制)
图片处理(解码、绘制)

GPU的优化:
(1)尽量减少视图的数量和层次
(2)尽量避免短时间内大量的图片显示,尽可能将多张图片合成一张进行显示。
(3)减少透明的视图(alpha < 1),不透明的视图设置opaque为YES。
(4)GPU能处理的最大纹理尺寸是4096 * 4096,一旦超过这个尺寸,需要占用CPU资源进行处理。
(5)避免离屏渲染

GPU有两种渲染方式:
(1)当前屏幕渲染On-Screen Rendering:在当前用于显示的屏幕缓冲区进行渲染操作。
(2)离屏渲染Off-Screen Rendering。在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

离屏渲染消耗性能的原因:
(1)需要创建新的缓冲区。
(2)离屏渲染的整个过程,需要多次切换上下文环境。
先是从当前屏幕切换到离屏,等到离屏渲染结束后,需要将离屏缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕。

触发离屏渲染的情况:

(1)光栅化
    self.view.layer.shouldRasterize = YES;
(2)遮罩
    self.view.layer.mask
(3)圆角
    self.view.layer.masksToBounds = YES;
    self.view.layer.cornerRadius = 10;
(4)阴影
    self.view.layer.shadowColor = [UIColor redColor].CGColor;
    设置self.view.layer.shadowPath不会触发离屏渲染。

相关文章

网友评论

      本文标题:性能调优

      本文链接:https://www.haomeiwen.com/subject/hsxgvktx.html