美文网首页
网络请求优化

网络请求优化

作者: 雪国落叶 | 来源:发表于2020-05-22 11:04 被阅读0次

    网络优化,首先要考虑网络请求有哪些过程,
    组拼数据------> 封装请求发起请求--->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是否耗时

    相关文章

      网友评论

          本文标题:网络请求优化

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