程序员@IT·互联网

IOS性能优化篇

2018-08-20  本文已影响0人  slimsallen
image

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

先来谈谈CPU和GPU

image

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

屏幕成像原理

image

卡顿产生的原因

image

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

卡顿优化 -CPU

卡顿优化 -GPU

离屏渲染

耗电优化

耗电的主要来源?

image

1. 定位优化

APP启动优化

先来看app启动流程

APP的启动可以分为2种

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

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

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

image

优化方案

一、dyld

二、runtime

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

三、main

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

上一篇下一篇

猜你喜欢

热点阅读