美文网首页
APP性能优化

APP性能优化

作者: 奔跑的蜗牛最开心 | 来源:发表于2018-06-12 16:29 被阅读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解析,路由算法,以及服务器端性能

    携程网络优化策略

    移动网络优化三要素

    相关文章

      网友评论

          本文标题:APP性能优化

          本文链接:https://www.haomeiwen.com/subject/uhxreftx.html