美文网首页Android专题Android技术
Android性能调优 - 网络优化

Android性能调优 - 网络优化

作者: Linhaojian | 来源:发表于2019-04-01 15:34 被阅读246次

    1.前言

    • 在移动互联网的快速发展环境下,手机用户日益对网络的使用或体验有着更深度的诉求,因此应用中的网络体验已经显得由此重要,而背后对开发者在网络性能有更高的要求。
    • 网络影响:
      1.最直观的就是用户交互体验
      2.流量的流失;
      3.电量的消耗;
    • 本文从连接、传输、监控 三个维度提出相关的优化。
    • 文章中实例 linhaojian的Github

    2.HTTP请求过程

    http请求流程.png
    • 通过上图可以很清楚的理解HTTP协议的请求过程:
      1.客户端输入域名,通过浏览器请求发送
      2.通过DNS解析域名,得到真正需要请求的服务器IP地址
      3.服务端接收到请求内容之后,做出响应
      (HTTP使用Socket构建基于TCP/IP协议的通讯)
    • 因此我们就可以针对上述流程总结可优化2个方向:连接、传输

    3.连接

    3.1 网络状态

    • 可以根据不同的网络状态(2G、3G、4G、Wifi)针对性的提供处理策略。

    3.2 弱网处理

    • 弱网的影响:存在较多的丢包、误码、超时、连接中断以及难以接入网络等情况;
    • 针对弱网情况,可做一下优化:
      1.失败重试: 可在Retrofit等网络框架添加拦截器,实现失败重试;

    3.3 IP直连

    • 优点:能减少DNS的域名解析过程,从而提升连接或请求的速度。
    • 缺点:IP暴露,不安全。

    3.4 HttpDns

    • 出自:是阿里研发的产品HttpDns
    • 作用:使用HTTP协议进行域名解析,代替现有基于UDP的DNS协议,域名解析请求直接发送到阿里云的HTTPDNS服务器,从而绕过运营商的Local DNS,能够避免Local DNS造成的域名劫持问题和调度不精准问题;

    3.5 Http1.0、Http1.1、Http2.0

    • 影响HTTP网络请求主要是 带宽延迟
    • Http1.0每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接,每次请求连接都需要3次握手,连接成本较高,性能较差。
    • Http1.1
      * 持久连接: 即TCP连接默认不关闭,可以被多个请求复用(对于同一个域名,大多数浏览器允许同时建立6个持久连接);
      * 管道机制: 即在同一个TCP连接里面,客户端可以同时发送多个请求,举例:需要发送2个请求,以前HTTP1.0的做法是请求一次需要等等响应,再请求第二次类似于一问一答,而HTTP1.1就支持同时请求,之后按序响应;
      * 缺点:队头阻塞,上述已说明HTTP1.1的TCP连接复用响应按序的,那么在多个请求使用同一个TCP连接的时候,一个响应的特别慢的时候,会影响后续的响应速度。
    • Http2.0
      * 降低延迟: 路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
      * 请求优先级: 多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。
      * header压缩: 前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
      * 数据传输: HTTP/2采用二进制格式而非文本格式。

    3.6 连接复用

    • 根据相同的HOST请求,可以设计连接的缓存,实现连接池进行复用。例如:OkHttp中的Dispatcher

    4.传输

    4.1 Protocol Buffers

    • 定义:Protocol Buffers 和 XML、JSON一样都是结构数据序列化的工具。
    • 作用:通过将结构化的数据(拥有多种属性)进行序列化,从而实现**数据存储和交换的功能 **。
    • 优点:在传输数据量较大的需求场景下,Protocol Buffer 比 XML、JSON 更小(3到10倍)、更快(20到100倍)、使用 & 维护更简单;而且 Protocol Buffer 可以跨平台、跨语音使用。

    4.2 Gzip

    • 定义:在 http/1.0 协议中关于服务端发送的数据可以配置一个 Content-Encoding 字段,这个字段用于说明数据的压缩方法。(Content-Encoding:gizp、Accept-Encoding: gzip)

    4.3 网络缓存

    • 网络缓存:提供一种将数据存储到本地的思想,实现减少服务器的请求负荷、加快请求速度、无网也能显示内容。例如:OkHttp的缓存机制(强制缓存对比缓存)。

    强制缓存:在缓存数据未失效的情况下,可以直接使用缓存数据,由两个字段Expires和Cache-Control用于标明失效规则。
    对比缓存:表示需要和服务端进行相关信息的对比,由服务器决定是使用缓存还是最新内容,如果服务器判定使用缓存,返回响应吗304,判定使用最新内容,则返回响应码200和最新数据(ETag和If-None-Match)。

    4.4 图片传输

    1.可通过Webp的图片格式传输。
    2.可实现图片缓存机制(`二级缓存:Lrucache;DisLrucache等`)。
    

    4.5 预加载

    • 在设计业务请求时,可合理的设计 数据提前加载 的方式,提升用户的体验。

    5.监控

    5.1 Android Profiler

    Android Profile.png
    • Receiving:表示下行流量, 即下载接收;
    • Sending:表示上行流量, 即上传发送;

    5.2 Stetho

    • Stetho 是Facebook开源的Andorid调试工具。当你的应用集成Stetho时,开发者可以访问Chrome,在Chrome Developer Tools中查看应用布局,网络请求,sqlite,preference等等,可视化一切应用操作(更重要的是不用root)。
      stetho.png
      stetho1.png

    5.总结

    • 到此,网络优化 介绍完毕。
    • 如果喜欢我的分享,可以点击 关注 或者 ,你们支持是我分享的最大动力 。
    • linhaojian的Github

    欢迎关注linhaojian_CSDN博客或者linhaojian_简书

    不定期分享关于安卓开发的干货。


    写技术文章初心

    • 技术知识积累
    • 技术知识巩固
    • 技术知识分享
    • 技术知识交流

    相关文章

      网友评论

        本文标题:Android性能调优 - 网络优化

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