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渲染回顾简单笔记相关推荐

  1. 渲染引擎分析 - 鸿蒙(OpenHarmony) JS UI 源码阅读笔记

    作者:门柳 鸿蒙是华为研发的新一代终端操作系统,能适用于 IoT.手表.手机.Pad.电视等各种类型的设备上,扛起"国产操作系统"的大旗,也遭受了很多非议.2021 年 6 月初发 ...

  2. Android UI 渲染机制的演进,你需要了解什么?

    前言 如今UI 渲染可能是诸多性能问题中最容易被察觉到的,Android 开发既要面对各式各样的手机屏幕尺寸和分辨率,还要与"凶残"的产品和 UI 设计师过招. 在正确实现复杂.炫 ...

  3. amaze ui各个模块简单说明

    amaze ui各个模块简单说明 导航添加依据 http://amazeui.org/css/  下面内容属学习笔记,如有理解偏差和错误请留言相告,感谢!* =(官网这块写的很详细) 一.基本样式 1 ...

  4. iOS开发UI篇—Quartz2D简单使用(二)

    iOS开发UI篇-Quartz2D简单使用(二) 一.画文字 代码: // // YYtextview.m // 04-写文字 // // Created by 孔医己 on 14-6-10. // ...

  5. React Native UI渲染流程分析(Android)

    前言 React Native App(后称RN App)的UI由JS端的View tree构成,在App运行时会创建相应的原生View tree.从结果看,这和安卓原生开发时用xml布局文件是一样的 ...

  6. android app性能优化大汇总(UI渲染性能优化)

    UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得"我的app加载很快"很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交 ...

  7. DirectX12(D3D12)基础教程(七)——渲染到纹理、正交投影、UI渲染基础

    目录 1.前言 2.渲染到纹理 3.调试支持 4.正交投影 5.UI渲染基础 6.本章完整代码链接 1.前言 记得那是在差不多10多年前,我在工作中认识了一位好兄弟小杨.那时他刚毕业,跟我是同一所大学 ...

  8. Android性能优化(4):UI渲染机制以及优化

    文章目录 1. 渲染机制分析 1.1 渲染机制 1.2 卡顿现象 1.3 内存抖动 2. 渲染优化方式 2.1 过度绘制优化 2.1.1 Show GPU overdraw 2.1.2 Profile ...

  9. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

最新文章

  1. myeclipse2014 mysql连接池_myeclips配置mysql连接池
  2. python知识:numpy的维度之变
  3. mysql数据横表变成竖表_MySQL中横表和竖表相互转换
  4. JavaScript | JSON基本格式
  5. esmini接入外部ego车控制
  6. 八、Pandas的基本使用
  7. web sqlite linux,基于嵌入式Linux和Sqlite的Web服务器的研究及应用
  8. 蓝牙广播错误码3_蓝牙简介—物理层(PHY)
  9. LIO-SAM探秘第三章之代码解析(四) --- mapOptmization.cpp (2)
  10. POJ 3168 Barn Expansion (几何+排序)
  11. 韩顺平 2021零基础学Java 学习笔记(1)(自用)
  12. Stream流简单使用之List集合排序
  13. 缓存数据一致性-解决方案
  14. 02-若依权限管理子系统简介(自己了解)
  15. 服务器被挖矿木马攻击该怎么处理
  16. c++实现图书管理系统v2.0
  17. 车牌识别matlab,车牌识别matlab实现(蓝色车牌和新能源车牌)
  18. portraiture4图片修图磨皮滤镜插件支持Win和Mac
  19. 特征工程——特征转换
  20. Fadeln()方法

热门文章

  1. windows下安装RabbitMQ消息服务器 + 读写队列
  2. C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
  3. 缓存中常见的概念及解决方案
  4. file_get_contents 在本地测试可以, 但在服务器上报错403
  5. Zabbix Server安装
  6. 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
  7. UICollectionView的sectionHeader悬浮效果
  8. java.lang.IllegalStateException: ContainerBase.addChild: start
  9. javascript中函数参数以及函数中局部变量作用域一点点理解
  10. 管道和过滤器模式----POSA模式助记格式