iOS性能优化 - 网络图片

导语: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可以检测是否发生离屏渲染(如果出现黄色就发生了离屏渲染)。


二、解决方案

1.像素不对齐

  • 要想像素对齐,必须保证image.size和显示图片view.size相等 且 image.scale和 [UIScreen mainScreen].scale相等。可以在网络图片下载完成后进行压缩裁剪等操作在进行渲染。

2.像素混合

  • 设置图片为不透明,可以设置背景颜色为白色。

3.离屏渲染

  • 离屏渲染是图片圆角处理中讨论比较多的问题,一般利用Core Graphics绘制。

你可能感兴趣的:(iOS性能优化 - 网络图片)