iOS 性能优化篇

2019-11-05  本文已影响0人  shen888

转自iOS 性能优化篇

好的 app 应该有好的性能流畅度,本篇文章就大概讲一下 ios 性能优化。

先来谈谈 CPU 和 GPU

渲染原理.jpg

在 iOS 中是双缓冲机制,有前帧缓存、后帧缓存,即 GPU 会预先渲染好一帧放入一个缓冲区内(前帧缓存),让视频控制器读取,当下一帧渲染好后,GPU 会直接把视频控制器的指针指向第二个缓冲区(后帧缓存)。当你视频控制器已经读完一帧,准备读下一帧的时候,GPU 会等待显示器的 VSync 信号发出后,前帧缓存和后帧缓存会瞬间切换,后帧缓存会变成新的前帧缓存,同时旧的前帧缓存会变成新的后帧缓存。

屏幕成像原理

image.png

卡顿产生原因

image.png

在 Sync 信号到来后,系统图形服务会通过 CADisplayLink 等机制通知 App,App 主线程开始在 CPU 中计算显示内容,比如视图的创建,布局计算,图片解码,文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行交换,合成,渲染。随后 GPU 会把渲染结果提交到帧缓冲区,等待下一次 VSync 信号(垂直同步信号)到来时显示到屏幕。由于垂直同步机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏因为没有新的刷新,会保留之前的内容不变。这就造成了卡顿。

卡顿优化-CPU

卡顿优化-GPU

离屏渲染

耗电优化

耗电的主要来源

1、定位优化

APP 启动优化

APP的启动可以分为2种

1、冷启动(Cold Launch):从零开始启动APP
2、热启动(Warm Launch):APP已经在内存中,在后台存活着,再次点击图标启动APP

APP启动时间的优化,主要是针对冷启动进行优化

APP 的冷启动概括为三大阶段

优化方案

一、dyld
二、runtime

用+initialize方法和dispatch_once取代所有的 __attribute__((constructor))、C++静态构造器、ObjC的+load

三、main

在不影响用户体验的前提下,尽可能将一些操作延迟,不要全部都放在finishLaunching方法中
按需加载

后面会分享自己的优化过程

上一篇 下一篇

猜你喜欢

热点阅读