UI渲染回顾简单笔记
UI渲染的简单过程:
CPU,GPU,显示器协同工作,CPU 中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等,然后将计算结果提交给GPU,由 GPU 进行变换、合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区去,随后等待下一次 VSync(垂直同步信号) 到来时,视频控制器会逐行读取帧缓冲区的数据,经过可能的数模转换传递给显示器显示。由于垂直同步的机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容不变。这就是界面卡顿的原因。CPU 和 GPU 不论哪个阻碍了显示流程,都会造成掉帧现象。所以开发时,也需要分别对 CPU 和 GPU 压力进行评估和优化。
渲染时机:
Core Animation 在 RunLoop 中注册了一个 Observer 监听 BeforeWaiting(即将进入休眠) 和 Exit (即将退出Loop) 事件 。当在操作 UI 时,比如改变了 Frame、更新了 UIView/CALayer 的层次时,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。当Oberver监听的事件到来时,回调执行函数中会遍历所有待处理的UIView/CAlayer 以执行实际的绘制和调整,并更新 UI 界面。
UI优化方案:
1 性能敏感界面,少用Storyboard
2 对象尽可能复用,减少对象创建,释放的次数
3 对view应该尽量减少不必要的属性修改。应该尽量避免调整视图层次、添加和移除视图。可以通过隐藏,显示来控制
4 布局方面:尽量提前计算好布局,在需要时一次性调整好对应属性,而不要多次、频繁的计算和调整这些属性。
5 Autolayout 对于复杂视图来说常常会产生严重的性能问题。随着视图数量的增长,Autolayout 带来的 CPU 消耗会呈指数级上升
6 尽量减少在短时间内大量图片的显示,尽可能将多张图片合成为一张进行显示。
7 应用应当尽量减少视图数量和层次,也可以用上面的方法,把多个视图预先渲染为一张图片来显示。
8 CALayer 的 border、圆角、阴影、遮罩(mask),CASharpLayer 的矢量图形显示,通常会触发离屏渲染(offscreen rendering),而离屏渲染通常发生在 GPU 中。避免使用圆角、阴影、遮罩等属性。
转载于:https://www.cnblogs.com/6duxz/p/7157751.html
UI渲染回顾简单笔记相关推荐
- 渲染引擎分析 - 鸿蒙(OpenHarmony) JS UI 源码阅读笔记
作者:门柳 鸿蒙是华为研发的新一代终端操作系统,能适用于 IoT.手表.手机.Pad.电视等各种类型的设备上,扛起"国产操作系统"的大旗,也遭受了很多非议.2021 年 6 月初发 ...
- Android UI 渲染机制的演进,你需要了解什么?
前言 如今UI 渲染可能是诸多性能问题中最容易被察觉到的,Android 开发既要面对各式各样的手机屏幕尺寸和分辨率,还要与"凶残"的产品和 UI 设计师过招. 在正确实现复杂.炫 ...
- amaze ui各个模块简单说明
amaze ui各个模块简单说明 导航添加依据 http://amazeui.org/css/ 下面内容属学习笔记,如有理解偏差和错误请留言相告,感谢!* =(官网这块写的很详细) 一.基本样式 1 ...
- iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇-Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...
- React Native UI渲染流程分析(Android)
前言 React Native App(后称RN App)的UI由JS端的View tree构成,在App运行时会创建相应的原生View tree.从结果看,这和安卓原生开发时用xml布局文件是一样的 ...
- android app性能优化大汇总(UI渲染性能优化)
UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得"我的app加载很快"很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交 ...
- DirectX12(D3D12)基础教程(七)——渲染到纹理、正交投影、UI渲染基础
目录 1.前言 2.渲染到纹理 3.调试支持 4.正交投影 5.UI渲染基础 6.本章完整代码链接 1.前言 记得那是在差不多10多年前,我在工作中认识了一位好兄弟小杨.那时他刚毕业,跟我是同一所大学 ...
- Android性能优化(4):UI渲染机制以及优化
文章目录 1. 渲染机制分析 1.1 渲染机制 1.2 卡顿现象 1.3 内存抖动 2. 渲染优化方式 2.1 过度绘制优化 2.1.1 Show GPU overdraw 2.1.2 Profile ...
- iOS开发UI篇—UIWindow简单介绍
iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...
最新文章
- myeclipse2014 mysql连接池_myeclips配置mysql连接池
- python知识:numpy的维度之变
- mysql数据横表变成竖表_MySQL中横表和竖表相互转换
- JavaScript | JSON基本格式
- esmini接入外部ego车控制
- 八、Pandas的基本使用
- web sqlite linux,基于嵌入式Linux和Sqlite的Web服务器的研究及应用
- 蓝牙广播错误码3_蓝牙简介—物理层(PHY)
- LIO-SAM探秘第三章之代码解析(四) --- mapOptmization.cpp (2)
- POJ 3168 Barn Expansion (几何+排序)
- 韩顺平 2021零基础学Java 学习笔记(1)(自用)
- Stream流简单使用之List集合排序
- 缓存数据一致性-解决方案
- 02-若依权限管理子系统简介(自己了解)
- 服务器被挖矿木马攻击该怎么处理
- c++实现图书管理系统v2.0
- 车牌识别matlab,车牌识别matlab实现(蓝色车牌和新能源车牌)
- portraiture4图片修图磨皮滤镜插件支持Win和Mac
- 特征工程——特征转换
- Fadeln()方法
热门文章
- windows下安装RabbitMQ消息服务器 + 读写队列
- C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
- 缓存中常见的概念及解决方案
- file_get_contents 在本地测试可以, 但在服务器上报错403
- Zabbix Server安装
- 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
- UICollectionView的sectionHeader悬浮效果
- java.lang.IllegalStateException: ContainerBase.addChild: start
- javascript中函数参数以及函数中局部变量作用域一点点理解
- 管道和过滤器模式----POSA模式助记格式