第三季:架构&性能&体系

目标:

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解析,路由算法,以及服务器端性能

携程网络优化策略

移动网络优化三要素


16.网络

1. Socket: 熟悉TCP/IP协议族,定义了主机如何连入因特网及数据束河在他们之间传输

        应用层: HTTP  SNMP  FTP  NDS

        传输层: TCP UDP

        网络层: IP

    1.Socket描述了一个IP, 端口对。它简化了程序的操作,知道对方的IP以及PORT就可以给对方发送消息,再由服务器来处理发送的这些消息。所以,socket一定包含了通信的双发,即客户端(Client)与服务器(server).

      a: 服务端利用socket监听端口

      b: 客户端发起连接

      c: 服务端返回信息,建立连接,开始通信

      d: 客户端,服务端断开连接

    2.套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本单元;

        应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的进程。

        多个TCP连接或者多个应用程序进程可能需要通过同一个TCP协议端口传输数据,为了区分不同的应用程序进程或连接

        许多计算机系统为应用程序与TCP/IP协议交互提供了套接字(socket)接口,应用层和传输层通过socket接口,区分来自不同应用程序或者网络连接的通信,实现数据传输的并发服务;

    3. 建立socket连接至少需要一对套接字,其中一个运行于客户端(Clientsocket),另一个运行于服务器端(Serversocket);

        套接字之间的连接分为三个步骤:服务器监听  客户端请求  连接确认。

    4.创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

五、产生死锁的四个条件

1.互斥条件 2.占有等待 3.不可强行占有 4.循环等待

六、拥塞控制

 某段时间,对网络中资源需求大于可用的造成拥塞

解决方案

1.慢开始:最初TCP建立连接后向网络发送大量数据包,很容易导致网络中路由器缓存空间耗尽

2.拥塞避免:每次访问结束让CWND增加一个,而不是一倍,增加的更加缓慢

3.快重传与快恢复算法

你可能感兴趣的:(第三季:架构&性能&体系)