一条网络请求,从客户端到服务器,有哪些可优化的点?分阶段记录一下

DNS请求

客户端连接服务器前,TCP会先去请求DNS服务器,获取真实IP,这个步骤可以省略,客户端直接连接服务器ip

三次握手

在获取到ip之后,TCP需要通过三次握手保证双方的收发功能正常。这个步骤在TCP中无法省略,除非使用基于UDP的协议,如QUIC

数据量部分

三次握手之后,Http就可以开始传输数据。这里考虑缩减传输的数据量。

Http请求头

Http2.0有复用机制,后一次的请求,请求头数据量会减少

Http请求体

Post请求的数据一般在请求头下面,可以使用protobuf,减少数据量。或使用gzip压缩数据

请求增量数据

  • 图片、大文件使用断点下载、续传
  • 网络请求请求增量数据

TCP协议

设置TCP_NODELAY属性,避免数据量小的时候被Nagle算法摆一道

Http协议

和服务器约定,使用persistence:keep-alive,复用连接,避免频繁连接服务器导致的DNS请求、三次握手导致的时间消耗

缓存复用

设置缓存有效期,避免每一次都使用网络请求数据。

其他

使用CDN,优化客户端到服务器之间的线路。

webview(补充)

部分js、资源使用本地资源加载

1
2
3
4
5
6
public WebResourceResponse shouldInterceptRequest(WebView var1, WebResourceRequest var2){
if (shouldIntercept(var2)){
return ...
}
super.shouldInterceptRequest(var1, vae2);
}