Moosphan/Android-Daily-Interview

2019-08-05:谈谈如何对网络请求进行优化?

Moosphan opened this issue · 11 comments

2019-08-05:谈谈如何对网络请求进行优化?

三级缓存?网络,内存,缓存?

最开始的是DNS,当我们发起一个网络请求,首先要经过DNS服务,将域名转化为IP地址,然后通过IP地址建立连接,DNS解析过慢??所以这可以是一个切入点;

其次Gzip
HTTP协议上的Gzip编码是一种用来改进WEB应用程序性能的技术,用来减少传输数据量大小,减少传输数据量大小有两个明显的好处;

然后涉及到图片上传(避免整文件传输,采用分片传输;
根据网络类型以及传输过程中的变化动态的修改分片大小;
每个分片失败重传的机会)和下载(使用WebP格式,使用缩略图)

1.为避免DNS解析异常问题,可以直接使用 IP 建立连接;
2.使用 Gzip 压缩 Response 减少数据传输量;使用 Protocol Buffer 代替 JSON;
3.请求图片的 url 中可以添加 格式、质量、宽高等参数;使用缩略图、使用 WebP格式图片,大图分片传输;
4.使用网络缓存,使用图片加载框架;
5.监听设备网络状态,根据不同网络状态选择对应情况下的网络请求策略:网络良好和弱网、离线等情况下分别设计不同的请求策略,比如 WIFI 下一个请求可以获取几十个数据,甚至可以一次性执行多个请求;而弱网下一个请求获取几个数据,且文本类型优先,富文本其次,除文本数据外其它类型的数据一开始只显示占位符;离线下事先保存请求数据到磁盘,在离线时从磁盘加载数据。

1.最开始的是DNS,当我们发起一个网络请求,首先要经过DNS服务,将域名转化为IP地址,为避免DNS解析异常问题,可以直接使用 IP 建立连接;
2.使用 Gzip 压缩 Response 减少数据传输量;使用 Protocol Buffer 代替 JSON;
3.请求图片的 url 中可以添加 格式、质量、宽高等参数;使用缩略图、使用 WebP格式图片,大图分片传输;
4.使用网络缓存,使用图片加载框架;
5.监听设备网络状态,根据不同网络状态选择对应情况下的网络请求策略:网络良好和弱网、离线等情况下分别设计不同的请求策略,比如 WIFI 下一个请求可以获取几十个数据,甚至可以一次性执行多个请求;而弱网下一个请求获取几个数据,且文本类型优先,富文本其次,除文本数据外其它类型的数据一开始只显示占位符;离线下事先保存请求数据到磁盘,在离线时从磁盘加载数据。

搬个小板凳 听大佬们回答

IP直接连接,那么https怎么办

  1. 最开始的是DNS,当我们发起一个网络请求,首先要经过DNS服务将域名转化为ip地址,为避免dns解析异常,可以直接使用ip建立连接
  2. 使用gzip压缩Response减少数据传输量;使用protocol Buffer代替JSOn
  3. 请求图片的url中可以添加格式,质量,宽高等参数;使用缩略图,webp格式图片,大图分片传输。
  4. 使用网络缓存,使用图片加载框架
  5. 监听设备的网络状态,根据不同网络状态选择对应情况下的网络请求策略:网络良好和弱网、离线等情况下分别设计不同的请求策略,比如wifi下一个请求可以获取几十个数据,甚至可以一次性执行多个请求,而弱网情况下一个请求获取姐数据,且文本类型有限,富文本其次,除文本数据外其他类型的数据一开始只显示占位符;李线下事先保存数据到磁盘,在离线是从磁盘加载数据。
  1. IP直连得不偿失,用httpdns吧
  2. 从xml到json再到类似protobuf,都是一步一步再缩减流量

关于这个问题,上面已经有一些客官回答的比较好了,我这里做一个补充

1、尽量避免使用多个不同的域名:域名需要通过DNS服务解析成IP,域名过多会浪费时间(当然了DNS会有缓存)
2、减少不必要数据的数据传输:后台返回数据的时候,如果数据没有用到可以不传递给客户端,避免造成浪费
3、使用GZip压缩数据:可以把传递的数据通过压缩变小
4、使用keep-alive: 网络请求之后,不断开链接,下次再次发起网络请求的时候,不用再次走三次握手
5、根据不同的网络环境,定制不同的策略:比如WiFi环境下,可以下载高清大图、下载热更资源等;移动网络状态下,不要进行太费流量的操作;