🔥界面卡顿的原因?

1-434 1-434     2022-12-01     262

关键词:

界面卡顿的原因, 界面为什么会卡顿?
界面成像原理:
 
不论是以前的CRT还是现在的液晶显示器,成像原理是一致的;
技术图片

 

 

CPU部分:逻辑的计算;计算好将要显示的内容转交给GPU;
GPU部分:GPU开始渲染后将结果换到帧缓冲区,随后视频控制器从帧缓冲区中读取数据,经过一系列的转换后交给显示器进行显示;
技术图片

 

 

技术图片

 

 

YYKit作者描述:首先从过去的 CRT 显示器原理说起。CRT 的电子枪按照上面方式,从上到下一行行扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次扫描。为了把显示器的显示过程和系统的视频控制器进行同步,显示器(或者其他硬件)会用硬件时钟产生一系列的定时信号。当电子枪换到新的一行,准备进行扫描时,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync;而当一帧画面绘制完成后,电子枪回复到原位,准备画下一帧前,显示器会发出一个垂直同步信号(vertical synchronization),简称 VSync。显示器通常以固定频率进行刷新,这个刷新率就是 VSync 信号产生的频率。尽管现在的设备大都是液晶显示屏了,但原理仍然没有变。
 
界面卡顿原因:
 
滑动时稳定在60fps左右(玩游戏的同学应该都能理解fps的概念)就感觉不到卡顿;
网上查了下现在的屏幕一般的刷新率为60HZ
 
每秒展示出60帧画面就不会掉帧(卡顿现象);
技术图片

 

 

也就是每帧画面的处理时间大概在16.7ms(1s/60 ≈16.7ms), 就不会出现卡顿现象;
 
知识点:每帧画面CPU+GPU的时间不能超过16.7ms, 如果超过16.7ms就会出现掉帧现象;
 
开发中遇到可能会造成卡顿的点
CPU部分:
 
对象的创建, 调整, 销毁;
frame布局的计算, autolayout布局;
文本的计算和渲染;
图片的解码和绘制;
 
GPU部分:
 
纹理的渲染;
视图的混合;
图像的渲染;
 
补充部分
画面撕裂
技术图片

 

 

画面撕裂出现原因: iOS采用双重缓存+垂直同步的方案;
GPU会先渲染一帧界面放到缓冲区中供视频控制器去显示, 当下一帧缓存好后视频控制器指向另一个缓存区; 这种机制可以提升效率,但是问题也随之而来, 假如视频控制器读取第一个缓存区内容尚未完成(即界面尚未完全显示), 这时GPU已经将下一帧界面渲染好放入缓存区内, 然后去展示另一个缓存区内的数据,
这样就会出现画面撕裂的现象;如图
 
垂直同步(简写也是 V-Sync)可以有效的解决这个问题;开启垂直同步后,GPU会等待显示器的VSync信号发出后才会进行新的一帧界面的渲染和缓存区更新, 这样可以提高画面的流畅度, 但是会消耗更多的资源;
 
资料参考连接
iOS 保持界面流畅的技巧
iOS 视图渲染以及性能优化总结
 
作者:飞不越疯人院
链接:https://www.jianshu.com/p/297b2cd22735
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

c++程序卡死ui界面卡顿问题的原因分析与总结(代码片段)

...2、软件卡死问题2.1、死循环2.2、死锁3、客户端软件的UI界面卡顿问题3.1、UI线程在频繁地写日志到文件中,导致UI线程时不时的卡顿3.2、从网上拷贝的代码中调用Sleep函数,导致UI界面有明显的卡顿4、总结VC++常用功... 查看详情

🔥如果页面a跳转到页面b,a的viewdiddisappear方法和b的viewdidappear方法哪个先调用?(代码片段)

如果页面A跳转到页面B,A的viewDidDisappear方法和B的viewDidAppear方法哪个先调用?ViewController为一级界面,BViewController和CViewController为两个二级界面ViewController为一级界面,BViewController和CViewController为两个二级界面//我在两个VC里面都... 查看详情

androidapp卡顿问题分析及解决方案

用户对卡顿的感知,主要来源于界面的刷新.而界面的性能主要是依赖于设备的UI渲染性能.如果我们的UI设计过于复杂,或是实现不够友好,计算绘制算法不够优化,设备又不给力,界面就会像卡住了一样,给用户卡顿的感觉.如果你... 查看详情

🔥🔥如何令自己所写的对象具有拷贝功能?(代码片段)

实现NSCoping协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现NSCopying与NSMutableCopying协议。@protocolNSCopying-(id)copyWithZone:(nullableNSZone*)zone;@end@protocolNSMutableCopying-(id)mutableCopyWithZone:(nullableNSZone*) 查看详情

鼠标卡顿不流畅是啥原因

...,不少用户使用的是Windows7旗舰版系统,这个系统本身的界面就比较华丽,加上多数用户对电脑的维护常识不多,被各种软件绑架安装,开机就启动了好多程序。对于一般的2GB内存用户来说可能开机就占用了50%的内存属于正常现... 查看详情

🔥🔥造成循环引用和内存泄漏的几种情况

原文地址:http://www.cnblogs.com/wengzilin/p/4347974.htmlARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露。导致iOS对象无法按预期释放的一个无形杀手是——循环引用。循环引用可以简单理解... 查看详情

ios面试题--页面卡顿原因以及如何解决卡顿

参考技术A一、CPU和GPU整体流程如下二、屏幕成像原理三、页面卡顿的原因四、解决卡顿的思路五、优化方案什么是离屏渲染?离屏渲染消耗性能的原因:需要创建新的缓冲区哪些操作会触发离屏渲染? 查看详情

instrument调试界面卡顿

参考技术A1.界面卡顿的原因。主要从两个角度考虑,cpu限制—》对象的创建,释放,属性调整,CALayer的属性调整的时候是会创建隐士动画,是比较损耗性能的;视图和文本的布局计算,AutoLayout的布局计算都是在主线程上的,所... 查看详情

苹果xsmax卡顿,反应慢是啥原因

卡顿的原因一般是内存垃圾太多,平时注意清理垃圾清理内存参考技术A这款手机配置还是非常不错的,应该不会出现卡顿现象,可能是你运行的应用太多才会这样吧。 参考技术B苹果手机出现卡顿反应慢的原因的话,建议你做一... 查看详情

git入门图文教程(1.5w字40图)🔥🔥--深入浅出图文并茂

Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。本文深入浅出、图文并茂的展示了Git的入门系列教程。01、认识一下Git!—简介Git是当前最先进、最主流的分布式版本控制系统,免费、开... 查看详情

openwrt5.10界面很卡

有几个原因可能会导致OpenWrt界面卡顿:1.硬件性能不足:如果你的路由器硬件配置太低,比如CPU、RAM、存储器等方面的配置不足,那么运行OpenWrt就会很慢,导致界面卡顿。2.系统负载过高:如果你的路由器同时运行了太多的应用程... 查看详情

🔥uiviewcontroller的生命周期(代码片段)

UIViewController的生命周期#pragmamark---lifecircle//非storyBoard(xib或非xib)都走这个方法-(instancetype)initWithNibName:(NSString*)nibNameOrNilbundle:(NSBundle*)nibBundleOrNilNSLog(@"%s",__FUNCTION__);if(self=[supe 查看详情

鼠标卡顿原因分析鼠标卡顿的几个原因

...光标速度”,来回拖动它,就可以解决此问题。2、系统卡顿。很多用户会将鼠标卡顿与系统卡顿混为一谈,鼠标卡顿、不流畅,是使用手指控制鼠标滑动的幅度大,光标游动的距离小,而系统卡顿是用户操作鼠标时,鼠标突然... 查看详情

wpf简单判断主线程界面是否卡顿的方法

...告诉大家如何使用简单的代码判断当前的软件的UI线程或界面是否卡顿在后台线程调用如下代码即可用来判断是否卡顿privatestaticasyncTask<bool>CheckDispatcherHangAsync(Dispatcherdispatcher)vartaskCompletionSource=newTaskCompletionSource<bool> 查看详情

wpf简单判断主线程界面是否卡顿的方法

...告诉大家如何使用简单的代码判断当前的软件的UI线程或界面是否卡顿在后台线程调用如下代码即可用来判断是否卡顿privatestaticasyncTask<bool>CheckDispatcherHangAsync(Dispatcherdispatcher)vartaskCompletionSource=newTaskCompletionSource<bool>( 查看详情

🔥谈谈事件的产生和传递和响应

谈谈事件的产生和传递和响应? ??事件的产生我们知道UIApplication、UIViewController、UIView都是UIResponder的子类,都是可以处理事件的。在发生触摸事件的时候系统会先将该事件交给UIApplication处理,通常UIApplication先将事件交给UIWi... 查看详情

ios底层原理:界面优化(代码片段)

...?关注后回复 “进群” ,拉你进程序员交流群????????界面优化无非就是解决卡顿问,优化界面流畅度,以下就通过先分析卡顿的原因,然后再介绍具体的优化方案,来分析如何做界面优化界面渲染流程具体流... 查看详情

解决粒子第一次加载卡顿第二次加载正常问题

...第三方粒子的时候会进行大量的解析 非常耗费CPU导致界面出现卡死解决:coocs官方建议开启custom模式       在实际测试中发现 开启custom模式后还是会卡顿 所以还需要添加粒子贴图才能解决卡... 查看详情