卡顿、掉帧原因


VSync垂直信号,一般说页面流畅是60fps,也就是每一秒钟会有60帧画面更新,相当于16.7ms就要产生一帧画面,那么在这16.7ms之内需要由CPU和GPU共同协同完成产生一帧的数据和画面。CPU做文本布局和UI计算、视图的绘制以及图片解码,然后把产生的位图最终提交给GPU,由GPU进行相应的涂层和成纹理渲染,显示到屏幕上。
在16.7ms内,CPU或者GPU没有把相应工作做完就会产生卡顿掉帧现象。

卡顿、掉帧优化

减轻CPU负担
对象创建、调整、销毁
预排班(布局计算、文本计算)
预渲染(文本等异步绘制,图片解码等)

减轻GPU负担
纹理渲染(避免离屏渲染 异步绘制)
视图混合(减轻视图复杂程度)

什么是离屛渲染?

当我们设置某一些UI视图的图层属性,标记为它在未预合成之前,不能用于当前屏幕上面直接显示的时候,就会触发离屏渲染。离屏渲染的概念,起源于GPU层面,指的是在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。

什么场景下会触发离屏渲染

设置视图的圆角属性(必须同时maskToBounds为YES才会触发)
设置视图的图层蒙版
设置阴影
设置光栅化

为何要避免离屏渲染

离屏渲染是发生在GPU层面上的,离屏渲染使GPU层面上面触发了OpenGL的多通道渲染管线,产生了额外的开销,所以我们要避免离屏渲染
离屏渲染会创建新的渲染缓冲区,会有内存上的开销。包括对上下文的切换(因为有多通道的渲染管线,所以会需要把多通道的渲染结果做渲染合成,就涉及到了上下文切换),就会有GPU的额外开销
触发离屏渲染时,会增加GPU的工作量,很可能导致CPU和GPU的总耗时加起来超过了16.7ms,就会导致UI的卡顿和掉帧,所以需要避免离屏渲染

iOS 卡顿、掉帧原因+优化相关推荐

  1. 小程序Android端movable-view拖拽卡顿掉帧的优化

    背景: 最近项目中使用到movable-view来做一个拖拽排序的功能,等到功能都实现完成后到真机测试发现,拖拽动画在Android端存在严重的卡顿掉帧,及其不跟手,但是在IOS端却挺流畅.查阅Goo ...

  2. 【iOS高级资深工程师面试篇】①、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 UI部分2/3 -图像显示原理-UI卡顿掉帧

    iOS高级资深工程师面试篇系列 - 已更新3篇 UI部分1/3 -UITableView-事件传递&视图响应 UI部分2/3 -图像显示原理-UI卡顿&掉帧 UI部分3/3 -UIVi ...

  3. 电脑录屏卡顿掉帧是什么原因 电脑录屏卡顿掉帧怎么解决

    很多人在用电脑录屏时会遇到卡顿或掉帧的情况,这些问题会严重影响录制视频的效果,观看体验变差.原视频画面没有问题,但是为什么录制时会出现这样的问题呢?今天就来探讨一下电脑录屏卡顿掉帧是什么原因,电脑录屏 ...

  4. Android卡顿掉帧问题分析之原理篇

    当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...

  5. Android卡顿掉帧问题分析之工具篇

    Android卡顿掉帧问题分析之原理篇 Android卡顿掉帧问题分析之工具篇 Android卡顿掉帧问题分析之实战篇 Android卡顿掉帧问题分析之原理篇 公众号:Android技术之家Andro ...

  6. 穿越火线好友服务器不稳定,穿越火线合区后新危机,玩家:卡顿掉帧没法玩

    原标题:穿越火线合区后新危机,玩家:卡顿掉帧没法玩 大家好我是小包子,今天和大家聊一下穿越火线经历了一次大规模的合区之后,玩家们顿时感受到了服务器真正的火热.服务器总数的减少使得很多地区的玩家们相聚一 ...

  7. 游戏本自动掉帧_Get这些操作,解决卡顿掉帧

    同样的配置 别人能撸的飞起 而你只能做一只卡*?(此处消音-) 明明能反杀,却最终输给了掉帧? 多么痛的领悟! 其实小编也是过来人,但是! 自从get了以下 操作宝典 那些痛的领悟,悄然结束-   1 ...

  8. 深入分析Android“卡顿掉帧”问题

    前言 全球手机市场中,安卓和iOS一直占着主流市场,iPhone手机给人的感觉就是流畅,而安卓手机却一直是卡顿的代名词 其实,安卓机刚上手时还是速度飞快的,并且基于它开放性的原则,受到多数用户的喜爱, ...

  9. csgo调哪个会流畅_对于游戏卡顿掉帧说不,三步提高游戏流畅性,让你纵享丝滑画面...

    在我们玩游戏的时候,经常会遇到画面掉帧或者卡顿,严重影响玩家游戏体验,所以小编结合自身经历今天给大家带来如何提高画面帧数以及游戏流畅性的小技巧. 一.什么是FPS数值 要想真正理解FPS,我们必须先科 ...

最新文章

  1. 尾气冒黑烟是什么问题_对机动车环保检测尾气排放的了解!
  2. Linux命令行上执行操作,不退回命令行的解决方法
  3. 【JavaScript】js数组与字符串的相互转换
  4. 14. Nginx 服务器架构
  5. 不通用版(从SVN取版本,通过MAVEN生成JAVA包,通过SALTSTACK传送到远程服务器并自动重启TOMCAT服务)PYTHON代码...
  6. Linux常用命令总结之(七)mkdir
  7. TopJUI通过简单的代码实现复杂的批量提交功能
  8. 语音识别技术竟然发展如此迅速
  9. Dagger2入门到放弃
  10. kettle简单的更新与插入
  11. 白云市场高仿包值不值得买?
  12. 大物 磁场对载流导线的作用 中dl转化为dx
  13. Hbase的应用场景及特点
  14. 学习Linux内核内存管理要看的布局图
  15. 汇率换算自然语言理解功能IOS DEMO
  16. DIY ROV系列(五)水下机器人通信系统
  17. Machine Learning Practical 爱宝week2
  18. 简单实现一下百度地图
  19. Codeforces A. Commentary Boxes
  20. HTTPS在微信中打开空白解决方法

热门文章

  1. 微信公众号教程(18)微信音乐播放器开发 上
  2. Arcgis地图服务切片
  3. 主题 04:如何设计一个复杂的系统(下)
  4. 金银岛(信息学奥赛一本通 - T1225)
  5. 计算机人工智能分数,分数一般想学人工智能?这6所双一流大学是首选
  6. 黑马程序员Java零基础视频教程(2022最新Java)B站视频学习笔记-Day15-阶段项目(拼图小游戏)(上篇)
  7. 嵌入式系统的硬件核心是什么?
  8. Unity日历组件制作
  9. 深度学习系列笔记之统计基础
  10. mapbox-gl 添加arcgis rest动态地图服务