移动端的http请求已经成为app必不可少的数据获取方式,但大多数网络请求模块主要焦点放在功能上,较少考虑到时间、空间等性能指标,时间主要是指请求时间,包括tcp建链的时间,数据传输时间,数据返回后处理或存储时间,空间主要指内存空间,主要是内存碎片及内存可用空间越来越小等问题。针对以上问题其实都是有解决办法的。
首先针对时间性能指标,应该使用多线程多连接并发复用技术,涉及到线程池技术、tcp连接复用技术,在线程池中对任务队列中的任务进行并发处理,同时tcp连接要采用复用技术,这样将大大减少请求时延,对大多数据http请求而言,tcp建连的时延远比数据传输时延要高,tcp连接复用技术可以大大减少http请求时间,达到提升时间性能指标的目的。同时采用多线程技术,支持并发,这样又可以增加客户端任务的并发,提升逻辑及界面的响应体验,同时减少服务器并发压力。反过来讲,如果不使用连接复用技术,对于服务器而言,压力在于建连,并发能力不变情况下,能够同时提供服务的用户数量必然受影响,因为进行n个请求,需要服务器分配n个sock资源,而采用复用连接技术,在并发能力不变的情况下,能够提供给更多的用户服务。对于复用的tcp连接,要有管理策略,即空闲策略,超过一定时长,自动释放该连接。现有的一些较知名软件,如微信、飞信在资源下载上都使用的是此技术。对于ios平台,ASI提供了此技术支持,AFNetwork则无此技术特征;android暂未对开放的http组件进行研究。
其次针对空间性能指标,此指标主要是在内存使用开销上,内存空间是有限的,当程序运行请求分配内存时,unix&linux系统基本上都是以4k为页基数,并且采用链表技术,当请求值小于4k时,从某页中获取并近回给申请者,以后续地址做为始址存入链表以便下