美文网首页知识点总结
iOS 界面卡顿(掉帧)原因

iOS 界面卡顿(掉帧)原因

作者: 飞不越疯人院 | 来源:发表于2019-04-07 10:20 被阅读28次

界面卡顿的原因, 界面为什么会卡顿?

界面成像原理:

不论是以前的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部分:

  1. 对象的创建, 调整, 销毁;
  2. frame布局的计算, autolayout布局;
  3. 文本的计算和渲染;
  4. 图片的解码和绘制;

GPU部分:

  1. 纹理的渲染;
  2. 视图的混合;
  3. 图像的渲染;

补充部分

画面撕裂

画面撕裂出现原因: iOS采用双重缓存+垂直同步的方案;
GPU会先渲染一帧界面放到缓冲区中供视频控制器去显示, 当下一帧缓存好后视频控制器指向另一个缓存区; 这种机制可以提升效率,但是问题也随之而来, 假如视频控制器读取第一个缓存区内容尚未完成(即界面尚未完全显示), 这时GPU已经将下一帧界面渲染好放入缓存区内, 然后去展示另一个缓存区内的数据,
这样就会出现画面撕裂的现象;如图


垂直同步(简写也是 V-Sync)可以有效的解决这个问题;开启垂直同步后,GPU会等待显示器的VSync信号发出后才会进行新的一帧界面的渲染和缓存区更新, 这样可以提高画面的流畅度, 但是会消耗更多的资源;

资料参考连接
iOS 保持界面流畅的技巧
iOS 视图渲染以及性能优化总结

相关文章

  • iOS 界面卡顿(掉帧)原因

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

  • iOS文章收录

    1、iOS如何监控界面卡顿掉帧,如何优化https://juejin.cn/post/69934852594676...

  • 界面优化

    一:界面卡顿 产生卡顿的原因:掉帧 一帧数据从处理到界面显示流程: CPU作用:计算一些显示的内容、视图的创建、视...

  • 读源码长知识 | Android卡顿真的是因为”掉帧“?

    Andriod 界面卡顿是因为掉帧,而掉帧是因为生产帧的速度跟不上消费帧的速度。 消费帧的速度与屏幕刷新率挂钩,屏...

  • 读源码长知识 | Android卡顿真的是因为”掉帧“?

    Andriod 界面卡顿是因为掉帧,而掉帧是因为生产帧的速度跟不上消费帧的速度。 消费帧的速度与屏幕刷新率挂钩,屏...

  • iOS卡顿、掉帧

    日常工作中,我们总会遇到一些反馈,用户称页面滑动不流畅偶尔还无响应,这个时候很多用户在有其他更优选择的情况下,就不...

  • iOS开发UI卡顿&掉帧原因

    一、UI卡顿原因 二、 卡顿监控的实现一般有两种方案: (1)主线程卡顿监控。通过子线程监测主线程的 runLoo...

  • UI卡顿掉帧原因

    下图中上面代表vsync垂直信号,我们一般说页面滑动流畅性是60fps指的就是每一秒钟会有60帧的画面更新,人眼所...

  • 如何避免卡顿掉帧

    如何避免卡顿掉帧

  • UI卡顿掉帧原因和滑动优化方案

    一、UI卡顿掉帧原因 iOS设备的硬件时钟会发出Vsync(垂直同步信号),然后App的CPU会去计算屏幕要显示的...

网友评论

    本文标题:iOS 界面卡顿(掉帧)原因

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