導語:App中顯示的圖片大部分來自服務器,一般使用SDWebImage幫我們下載并顯示,但是這并不是最好的效果,本文介紹如何優化網絡圖片的顯示。
友情提示:性能優化是個無底洞,建議適可而止。
一、存在的問題
1.像素不對齊
由于網絡圖片一般不會有@2x和@3x之分,通過SDWebImage庫下載的圖片不加以處理就直接顯示。
像素不對齊是指物理像素(pixel)不對齊;出現像素不對齊,會導致GPU在渲染時,對沒對齊的邊緣,進行插值計算,造成性能損耗了。
當圖片的size和顯示圖片View的size不同 或 圖片的scale和屏幕的scale不同,就會發生像素不對齊的問題。
iPhone模擬器中的Debug -> Color Misaligned Images選項 或Core Animation->Display Settings->Color Misaligned Images選項都可以將像素不對齊的部分顯示出來。
當UIView(及其子類)的frame像素不對齊顯示洋紅色;當圖片的像素大小與控件的大小不一致,顯示黃色。
2.像素混合
像素混合是指在某視圖為透明背景色,GPU在渲染視圖時,需要將該視圖和下層視圖混合(Blend)后才能計算出該像素點的實際顏色;這增加了GPU的工作,損耗了性能。
當圖片是透明圖片時,像素混合必然會發生。
iPhone模擬器中的Debug ->Color Blended Layers選項 和 Core Animation ->Display Settings ->Color Blended Layers都可以將像素混合的部分顯示出來。
發生了像素混合的區域顯示紅色,正常則顯示綠色。
3.離屏渲染
- App中經常使用圓角圖片,如果通過設置cornerRadius值和masksToBounds=YES實現圓角效果。因為它會觸發GPU的離屏渲染,引起性能問題。模擬器中的Color Offscreen-Rendered可以檢測是否發生離屏渲染(如果出現黃色就發生了離屏渲染)。
</br>
二、解決方案
1.像素不對齊
- 要想像素對齊,必須保證image.size和顯示圖片view.size相等 且 image.scale和 [UIScreen mainScreen].scale相等。可以在網絡圖片下載完成后進行壓縮裁剪等操作在進行渲染。
2.像素混合
- 設置圖片為不透明,可以設置背景顏色為白色。
3.離屏渲染
- 離屏渲染是圖片圓角處理中討論比較多的問題,一般利用Core Graphics繪制。