主要講解界面卡頓的原因
iOS 性能優(yōu)化一
iOS 性能優(yōu)化二
iOS 性能優(yōu)化三
1. 界面卡頓的原因, 界面為什么會(huì)卡頓?
界面成像原理:
不論是以前的CRT還是現(xiàn)在的液晶顯示器,成像原理是一致的;都是通過CPU
和 GPU
的協(xié)調(diào)作用來成像;
-
CPU(Central Processing Unit)
:中央處理器, 邏輯的計(jì)算;計(jì)算好將要顯示的內(nèi)容轉(zhuǎn)交給GPU
; -
GPU(Graphics Processing Unit )
:圖像處理器,GPU
開始渲染后將結(jié)果換到幀緩沖區(qū),隨后視頻控制器從幀緩沖區(qū)中讀取數(shù)據(jù),經(jīng)過一系列的轉(zhuǎn)換后交給顯示器進(jìn)行顯示;
顯示的過程大致如下
2. 界面卡頓原因:
滑動(dòng)時(shí)穩(wěn)定在60fps左右(玩游戲的同學(xué)應(yīng)該都能理解fps的概念)就感覺不到卡頓;
網(wǎng)上查了下現(xiàn)在的屏幕一般的刷新率為60HZ
每秒展示出60幀畫面就不會(huì)掉幀(卡頓現(xiàn)象);
也就是每幀畫面的處理時(shí)間大概在16.7ms(1s/60 ≈16.7ms), 就不會(huì)出現(xiàn)卡頓現(xiàn)象;
知識(shí)點(diǎn):每幀畫面CPU+GPU的時(shí)間不能超過16.7ms, 如果超過16.7ms就會(huì)出現(xiàn)掉幀現(xiàn)象;
補(bǔ)充部分
1. 畫面撕裂
畫面撕裂出現(xiàn)原因: iOS采用雙重緩存+垂直同步的方案;
GPU
會(huì)先渲染一幀界面放到緩沖區(qū)中供視頻控制器去顯示, 當(dāng)下一幀緩存好后視頻控制器指向另一個(gè)緩存區(qū); 這種機(jī)制可以提升效率,但是問題也隨之而來, 假如視頻控制器讀取第一個(gè)緩存區(qū)內(nèi)容尚未完成(即界面尚未完全顯示), 這時(shí)GPU
已經(jīng)將下一幀界面渲染好放入緩存區(qū)內(nèi), 然后去展示另一個(gè)緩存區(qū)內(nèi)的數(shù)據(jù),
這樣就會(huì)出現(xiàn)畫面撕裂的現(xiàn)象;如圖
垂直同步(簡(jiǎn)寫也是
V-Sync
)可以有效的解決這個(gè)問題;開啟垂直同步后,GPU
會(huì)等待顯示器的VSync
信號(hào)發(fā)出后才會(huì)進(jìn)行新的一幀界面的渲染和緩存區(qū)更新, 這樣可以提高畫面的流暢度, 但是會(huì)消耗更多的資源;
2. 成像原理
YYKit
作者描述:首先從過去的 CRT
顯示器原理說起因块。CRT
的電子槍按照上面方式熊痴,從上到下一行行掃描材彪,掃描完成后顯示器就呈現(xiàn)一幀畫面,隨后電子槍回到初始位置繼續(xù)下一次掃描耙替。為了把顯示器的顯示過程和系統(tǒng)的視頻控制器進(jìn)行同步斑胜,顯示器(或者其他硬件)會(huì)用硬件時(shí)鐘產(chǎn)生一系列的定時(shí)信號(hào)会前。當(dāng)電子槍換到新的一行姥闪,準(zhǔn)備進(jìn)行掃描時(shí),顯示器會(huì)發(fā)出一個(gè)水平同步信號(hào)horizonal synchronization
肌毅,簡(jiǎn)稱HSync
筷转;而當(dāng)一幀畫面繪制完成后,電子槍回復(fù)到原位悬而,準(zhǔn)備畫下一幀前呜舒,顯示器會(huì)發(fā)出一個(gè)垂直同步信號(hào)vertical synchronization
,簡(jiǎn)稱 VSync
摊滔。顯示器通常以固定頻率進(jìn)行刷新阴绢,這個(gè)刷新率就是VSync
信號(hào)產(chǎn)生的頻率。盡管現(xiàn)在的設(shè)備大都是液晶顯示屏了艰躺,但原理仍然沒有變呻袭。