iOS网络性能优化之路

释放双眼,带上耳机,听听看~!

 

文章目录

    • 一、度量网络性能
          • 1.网络带宽
          • 2.网络延迟
          • 3.设备电量
    • 二、优化网络操作
          • 1.减少请求带宽
          • 2.降低请求延迟
          • 3.避免网络请求
    • 三、iOS用户都希望应用能够立刻响应每个请求

一、度量网络性能

1.网络带宽

用于描述无线网络性能的最常见度量指标就是带宽。在数字无线通信中,网络带宽可以描述为两个端点之间的通信通道每秒钟可以传输的位数。现代无线网络所能提供的理论带宽是很高的。不过请记住,运营商与网络设备提供商引用的带宽数字常常是该项技术的理论最大值,网络设备使用的实际带宽可能与这个最大值之间存在很大的偏差。

2.网络延迟

度量网络性能的第2个因素是网络延迟,指的是网络包在两个端点间一次往返所需的时间。无线运营商很少会提到网络的延迟数据,不过延迟却会对应用的实际性能造成很大影响。与带宽一样,有很多因素会影响到应用遭受的延迟情况。主要因素就是用于将设备连接到外界的无线网络技术本身的延迟。

3.设备电量

iOS设备的运行通常使用的都是电池,应用采取的每个动作都会消耗电量。iOS设备上电量的使用大户主要有:

  1. 屏幕显示与背光
  2. 位置服务
  3. wifi-无线电
  4. WWAN(蜂窝)无线电
  5. 图形处理器
  6. CPU
  7. 蓝牙无线电
  8. 声音处理器

除了屏幕显示之外,应用能够控制上面的大多数。

二、优化网络操作

1.减少请求带宽
  • 使用高效的数据交换格式,JSON与XML是用于请求与响应体的常见的数据编码方式。压缩模式的效率在很大程序上取决于待压缩的数据,不过通常情况下JSON都是一种更为高效的模式。
  • Web浏览器对请求压缩的支持并不太好,因为浏览器不知道目标服务器是滞能够支持对请求的解压缩。如果服务器无法理解压缩模式,那么请求就会被丢弃,客户端应用将无法得到响应。
  • 在可能的情况下使用预先压缩的数据(使用专门算法对诸如音频,视频和图像进行压缩或按比例缩放以适应通道与设备)
    压缩每一个请求与响应负载(iOS网络请求中都是默认开启压缩的,接收到负载会自动解压缩并以最初的格式呈现在代码中。解压缩的计算代价要比传输10倍字节的通信代价低,因此,激活响应压缩几呼是有益无害的)
    如果想禁用压缩,应该可以通过清除自动设定的Accept-Encoding头来实现。如相代码演示了如何清除这个头:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLCacheStorageAllowed timeoutInterval:20];
[request addValue:@"" forHTTPHeaderField:@"Accept-Encoding"];
2.降低请求延迟
  • 实现上,在iOS设备上,我们没有办法降低单个网络请求的延迟,不过可以通过一些技术来降低多个请求的延迟。
  • 降低请求延迟有两项最佳实践:在单个TCP连接上发送HTTP请求,以管道的形式发送HTTP请求,从而优化全双工TCP连接的使用。网络延迟包括在手机与运营商网络间建立连接的时间,建立TCP连接的时间,可能还有协商SSL连接的时间,以及发送与接收HTTP请求的时间。 应用可以按照顺序执行所有队列请求,在这个过程中一直保持激活相同的连接,避免建立多个TCP连接开销。
    可以轻松为NSURLRequest开启管道支持,如下:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url];
[request setHTTPShouldUsePipelining:YES];

不过,并非所有的服务器都支持HTTP管道

  • Apache和IIS都支持管道,无需任何额外的配置。
3.避免网络请求
  • 通过HTTP缓存机制的基本原理,在iOS应用中利用这些规则,可以在本地缓存内容以避免不必要的网络流量。
  • HTTP被设计作为浏览器与服务器之间的通信,缓存机制也是针对这种使用模式的。iOS提供了一种机制来利用标准的HTTP缓存,以及采取相应的行为。通过NSURLRequest发出的每个请求都会经过缓存组件。该组件是NSURLCache或其子类的实例。
  • 在iOS中有一种奇怪的现象,即在某些情况下,应用中的系统组件会将缓存的内存容量设为0,这就禁用了缓存。解决无法解释的行为的一种方式就是通过自已的实现子类化NSURLCache。拒绝将内存缓存大小设为0.

三、iOS用户都希望应用能够立刻响应每个请求

移动产业有这样一条原则,即屏幕越小,用户越没耐心。提供让用户乐于使用的应用意味着要珍惜用户的时间,就像珍惜你自己的时间一样。通过压缩请求与响应来优化应用所使用的带宽,通过管道化请求避免不必要的延迟,甚至通过缓存响应来避免冗余的网络请求都会加速应用并改进用户体验。

人已赞赏
iOS文章

iOS App启动+广告思路

2020-5-3 22:16:50

iOS文章

iOS性能优化之页面加载速率

2020-5-3 23:31:54

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索