面试题

OC底层知识点之 -界面优化(上)

2021-01-06  本文已影响0人  iOS开发面试总结

今天我们聊下界面卡顿的原理以及优化

界面卡顿

图像显示过程

通常来说,计算机中的显示过程是如下图所示:

通过上图可知,显示过程是通过CPU、GPU、显示器协调工作来将图片显示到屏幕上。具体分以下几步:

iOS双缓冲机制+VSync

卡顿原因

上面说了展示过程,下面就来说下卡顿原因。

如下图所示:

上图是一个显示过程,第1帧在VSync到来前,处理完成,正常显示,第2帧在VSync到来后,仍在处理中,此时屏幕不刷新,依旧显示第1帧,此时就出现了掉帧情况,渲染时就会出现明显的卡顿现象,CUP和GPU不论是哪个阻碍显示流程,都会造成掉帧现象,所以为了给用户提供更好的体验,在开发中,我们需要进行卡顿检测以及相应的优化

卡顿监控

卡顿监控一般有两种:

FPS监控

FPS的监控,参照YYKit中的YYFPSLabel,主要是通过CADisplayLink实现。借助link的时间差,来计算一次刷新刷新所需的时间,然后通过刷新次数/时间差得到刷新频次,并判断是否其范围,通过显示不同的文字颜色来表示卡顿严重程度。核心代码实现如下:

如果只是简单的监测,使用FPS足够了。

主线程卡顿监控

除了FPS,还可以通过RunLoop来监控,因为卡顿的是事务,而事务交由主线程RunLoop处理的。

【实现思路】检测主线程每次执行消息循环的时间,当这个时间大于规定的阈值时,就记为发生了一次卡顿。这个也是微信卡顿三方matrix的原理 以下是一个简易版RunLoop监控的实现

使用时,直接调用即可

卡顿检测还有一些优秀的第三方供我们选择

界面优化

CPU层面的优化

GPU层面优化

相对于CPU而言,GPU主要是接收CPU提交的纹理+顶点,经过一系列运算,最终混合并渲染输出到屏幕上。

最后推荐个我的iOS交流群:[89 1 488 18 1 ]
'有一个共同的圈子很重要,结识人脉!里面都是iOS开发,全栈发展,欢迎入驻,共同进步!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)


作者:空白记忆
链接:https://juejin.cn/post/6909473334069559303
上一篇 下一篇

猜你喜欢

热点阅读