APP性能优化

2018-06-12  本文已影响3人  奔跑的蜗牛最开心

目标:

1.要达到什么样的流畅度(FPS达到60为优秀) FPS:1秒渲染多少帧

2.应用内存降到一个具体数字

方案: 可以通过两个的纬度考虑性能优化

CPU与GPU资源消耗原因以及解决办法

CPU:加载对图文布局

加载资源,对象创建,对象调整,对象销毁,图片解码,图片绘制,文本计算,文本渲染,布局计算,布局Autolayout

GPU:文视图

纹理渲染,视图混合,图形形成(三角,遮罩)

GPU的渲染性能比CPU高效很多,同时对系统的负载和消耗更低一些,所以,我们应该尽量让CPU负责主线程UI调动,图形显示相关工作交给GPU

软件性能优化:启动内存管理:4避免,3图片,NSAutoreleasepool/coreText ,网络优化

1.启动优化

2.内存管理

使用ARC,避免循环引用,CoreAnimation对象手动释放

3.避免主线程阻塞

永远不要使主线程承担过多

阻碍主进程的情形:1.网络同步请求2.I/0操作:读写外部资源3.大量运算4.解压缩

4.避免过于庞大的XIB


5.避免使用透明视图

透明对性能要求较高

6.避免离屏渲染

离屏渲染,指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。离屏渲染意味着你App的部分区域每一帧渲染了两次。所以会造成一定的性能损失。

7.图片的处理

通常会用imageNamed:来加载mainbundle中的图片,此函数会缓存加载的image。因此,对于那些被重用的图片,这个API很高效。但是对于那些使用很少的图片,用这个就很耗内存。

使用一次的应用图片时使用initWithContentsOfFile:函数,加载多次使用的图片时就使用imageNamed:函数。 

8.在Imageview中调整图片大小:

1. 如果要在UIImageview中显示本地资源图片,尽量保持大小一致,运行中缩放图片很消耗资源

2.如果图片是从远端服务加载的不能控制图片大小,最好缩放一次,然后在UIImageView中使用缩放后的图片

9.使用缓存/SDWebImage与Cache

因为数据具有时效的,所以对于时效性要求不高的数据完全可以使用缓存来保证快速显示。例如URL对应的图片缓存(SDWebImage),通过数据库活core Data来保存不需要变动的数据,UIWeb的缓存等都属于这种

10.NSAutoreleasepool

在临时创建大量对象时,使用NSAutoreleasepool,例如,一个循环用于创建包含多个对象的数组,在循环体内,即可使用@autoreleasepool包裹创建代码。使用系统的@autoreleasepool会有延迟,内存不会马上释放。

11.CoreText

对于排版复杂的文字或者图文混排,使用CoreText技术 

12.减少Layer与视图层级

减少视图或者layer的层级数量,在有多个层级时,可以将多图合并成一张图,再渲染显示。

13.重用一些高消耗的对象

如NSDateFormatter、NSCalender等。解决方法:可以将其作为property、甚至是静态变量作为单例在APP中使用。并且,NSDateFormatter的 setDateFormate也是非常消耗资源的一个操作。网络传输过来的数据,往往是json或xml字符串。直接将这些字符串转换成我们需要的数据结构(自定义类或者NSDictionary),避免后续使用的时候还要做数据结构转换产生不必要的消耗。

14.关于后台运行

进入后台后,即尽量减少内存占用、释放所有的共享资源(如Calender或address book),因为iOS会kill后台中内存消耗最多的或者进入后台还占用共享资源的进程。

15.网络性能

网络性能优化涉及到DNS解析,路由算法,以及服务器端性能

携程网络优化策略

移动网络优化三要素

上一篇 下一篇

猜你喜欢

热点阅读