网络优化,首先要考虑网络请求有哪些过程,
组拼数据------> 封装请求发起请求--->DNS获取ip-->通过htt发送出去--->网络包在网络中传输 --> 服务端收到请求返回端上。
组拼数据
较少数据量:Protobuf,gzip
网络缓存:提供一种将数据存储到本地的思想,实现减少服务器的请求负荷、加快请求速度、无网也能显示内容。例如:OkHttp的缓存机制(强制缓存 与 对比缓存)。
强制缓存:在缓存数据未失效的情况下,可以直接使用缓存数据,由两个字段Expires和Cache-Control用于标明失效规则。
对比缓存:表示需要和服务端进行相关信息的对比,由服务器决定是使用缓存还是最新内容,如果服务器判定使用缓存,返回响应吗304,判定使用最新内容,则返回响应码200和最新数据(ETag和If-None-Match)。
图片传输:用webp格式等,本地缓存。
封装和发起请求
根据相同的HOST请求,可以设计连接的缓存,实现连接池进行复用。例如:OkHttp中的Dispatcher;
dns阶段
IP直连, 多个ip直连。
DNS可能存在被劫持等问题,在之前的文章中也分析了DNS解析的过程,解决方案主要有httpDns等。
网络包在网络中传输
弱网环境引发的丢包问题,设置timeout时间,缩短发送的数据量,尝试一次quick协议。
服务端收到请求返回端上。
预加载的方式,提前返回一些信息。
看到一篇博客提到网络请求 Android部分手机4G网第一次请求很慢(wifi正常)
他在测试过程中发现InetAddress.getAllByName("xxxx.cn");
1、连接到公司wifi,只解析到 ipv4 地址
2、连接到4G网,解析到了ipv4、ipv6俩个地址
但是ipv6默认为集合中的第一个,是否我们可以尝试修改集合第一个为ipv4呢?
到这里有个问题,getAllByName函数耗时吗?如果不耗时,就是网络请求访问ipv6网址耗时,需要求证。
问题一: getAllByName是否耗时
网友评论