Android性能优化之网络优化

网络请求流程

优化前先描述一下一条正常网络请求的流程:

  • DNS 解析,请求DNS服务器,获取域名对应的IP地址;
  • 与服务器建立连接,包括 TCP三次握手,安全协议同步流程;
  • 连接建立完成,发送和接收数据,解码数据;

在了解了网络请求的流程后,针对上面这三步流程分别进行优化:

一、DNS优化

在 Android APP 访问网络的时候,第一步就是 DNS 解析,默认使用运行商的 LocalDNS 服务,DNS 完整的解析流程很长,会先从本地系统缓存取,若没有就到最近的 DNS 服务器取,若没有再到主域名服 务器取,每一层都有缓存,但为了域名解析的实时性,每一层缓存都有过期时间。

传统的DNS解析机制有几个缺点:

  • 缓存时间设置得长,域名更新不及时,设置得短,大量 DNS 解析请求影响请求速度;
  • 域名劫持,容易被中间人攻击,或被运营商劫持,把域名解析到第三方 IP 地址,据统计劫持率会达到7%;
  • DNS 解析过程不受控制,无法保证解析到最快的IP;
  • 一次请求只能解析一个域名。

现在比较简单也最成熟的优化方案是使用HTTPDNS:

HTTPDNS 是利用 HTTP 协议与 DNS 服务器的 80 端口进行交互。不走传统的 DNS 解析,从而绕过运营商的 LocalDNS 服务器,有效的防止了域名劫持,提高域名解析的效率。
这就意味着,开发者基于 HTTP 协议,自己实现了一套域名解析,自己去维护了一份域名与 IP 的地址簿,而不是使用统一的DNS服务器。
目前各大云服务商,阿里云和腾讯云等都提供了自己的 HTTPDNS 服务,对于我们普通开发者,只需要付出少量的费用,在手机端嵌入支持 HTTPDNS 的客户端 SDK,即可使用。
另外,在使用okhttp时默认使用系统的DNS服务,可以通过okhttp中的.dns()接口,配置HTTPDNS。

二、连接优化

优化方式:

  • 启用keep-alive,okhttp中已默认打开,但需要服务器支持
  • 使用http2

使用keep-alive来缓存,通过http2来复用请求连接

三、数据传输优化

  • 开启 gzip 压缩,okhttp默认支持接收gzip压缩
  • 使用protoful格式代替json,xml
  • 使用webp代替png/jpg
  • 判断网络环境,下发不同图片
  • http开启缓存/本地缓存

protoful相较于json和xml而言,序列化之后是二进制数据,更加紧凑体积要小很多,传输效率要快很多,且支持多种语言,缺点就是使用其他没有另外两种格式方便

webp在移动端数据传输中,图片的占比还是很大的,webp具有更优的图像数据压缩算法,在拥有肉眼无法识别差异的图像质量前提下,带来更小的图片体积,同时具备了无损和有损的压缩模式、Alpha 透明以及动画的特性,在 JPEG 和 PNG 上的转化效果都非常优秀、稳定和统一

网络/本地缓存和gzip压缩比较常用,判断网络环境是指请求大量数据前可以先向服务器上报设备当前的网络环境,服务器根据设备的网络环境,下发不同质量的图片,或屏蔽一些非关键数据,以保证在网络不佳的情况下也能有较流畅的体验;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值