写点什么

android 进阶篇 09、电量与网络优化简述,android 内存优化方案

用户头像
Android架构
关注
发布于: 刚刚

二、网络优化

一条网络请求需要经过的流程如下


  • DNS 解析,请求 DNS 服务器,获得域名对应的 IP

  • 与服务器建立连接,包括 tcp 三次握手,ssl 安全连接等

  • 连接建立,发送和接受数据,解析数据


因此可以从这三步中进行优化;

1、DNS 优化

DNS 完整的解析流程很长,会先从本地系统缓存取,若没有就到最近的 DNS 服务器取,若没有再到主域名服务器取,每一层都有缓存,但为了域名解析的实时性,每一层缓存都有过期时间。


传统的 DNS 解析有几个缺点


  • 缓存时间设置得长,域名更新不及时,设置得短,大量 DNS 解析请求影响请求速度;

  • 域名劫持,容易被中间人攻击,或被运营商劫持,把域名解析到第三方 IP 地址;

  • DNS 解析过程不受控制,无法保证解析到最快的 IP;


为了解决这些问题,我们可以使用 HTTPDNS,原理很简单,就是自己做域名解析的工作,通过 HTTP 请求后台去拿到域名对应的 IP 地址,直接解决上述所有问题。


可以通过使用阿里的 httpDNS 进行 DNS 优化;

2、连接优化

复用连接,不用每次请求都重新建立连接,如何更有效率地复用连接,可以说是网络请求速度优化里最主要的点了。


keep-alive


HTTP 协议里有个 keep-alive,HTTP1.1 默认开启,一定程度上缓解了每次请求都要进行 TCP 三次握手建立连接的耗时。原理是请求完成后不立即释放连接,而是放入连接池中,若这时有另一个请求要发出,请求的域名和端口是一样的,就直接拿出连接池中的连接进行发送和接收数据,少了建立连接的耗时。 实际上现在无论是客户端还是浏览器都默认开启了 keep-alive,对同个域名不会再有每发一个请求就进行一次连接的情况,纯短连接已经不存在了。


但有 keep-alive 的连接一次只能发送接收一个请求,在上一个请求处理完成之前,无法接受新的请求。若同时发起多个请求,就有两种情况:


若串行发送请求,可以一直复用一个连接,但速度很慢,每个请求都要等待上个请求完成再进行发送。


若并行发送请求,那么只能每个请求都要进行 tcp 三次握手建立新的连接。


http2 开始开启了多路复用,解决了 http1.1 对同一个 ip 的多次请求不能复用一个 socket 的情况;


Android 的开源网络库 OKhttp 默认就会开启 keep-alive ,并且在 Okhttp3 以上版本也支持了 HTTP2。

3、数据压缩

数据对请求速度的影响分两方面,一是压缩率,二是解压序列化反序列化的速度。目前最流行的两种数据格式是 json 和 protobuf,json 是字符串,protobuf 是二进制,即使用各种压缩算法压缩后,protobuf 仍会比 json 小,数据量上 protobuf 有优势,序列化速度 protobuf 也有一些优势 。


除了选择不同的序列化方式(数据格式)之外,Http 可以对内


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


容(也就是 body 部分)进行编码,可以采用 gzip 这样的编码,从而达到压缩的目的。在 OKhttp 的 BridgeInterceptor 中会自动为我们开启 gzip 解压的支持。

4、其他方面优化

  1. 使用 webp 代替 png/jpg

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
android进阶篇09、电量与网络优化简述,android内存优化方案