一、全新网络请求链
- 发起请求(callStart)
- 检查代理开始(proxySelectStart)
- 检查代理结束(proxySelectEnd)
- DNS解析开始(DNS Start)
- DSN解析结束(DNS End)
- 网络连接开始(connectStart)
- 网络安全连接开始(secureConnectStart)注:https
- 网络安全连接结束(secureConnectEnd)注:https
- 网络连接结束(connectEnd)
- 获得网络连接(connectionAcquired)
- 请求头开发(requestHeadersStart)
- 请求头结束(requestHeadersEnd)
- 响应请求头开始(responseHeadersStart)
- 响应请求头结束(responseHeadersEnd)
- 响应请求体开始(responseBodyStart)
- 响应请求体结束(responseBodyEnd)
- 连接释放(connectionReleased)
-
请求结束(callEnd)
image.png
二、复用网络请求链
- 发起请求(callStart)
- 获得网络连接(connectionAcquired)
- 请求头开发(requestHeadersStart)
- 请求头结束(requestHeadersEnd)
- 响应请求头开始(responseHeadersStart)
- 响应请求头结束(responseHeadersEnd)
- 响应请求体开始(responseBodyStart)
- 响应请求体结束(responseBodyEnd)
- 连接释放(connectionReleased)
-
请求结束(callEnd)
image.png
三、思考?
客户端优化网络请求空间在如下几个链路上
- 检查代理开始(proxySelectStart)
- 检查代理结束(proxySelectEnd)
- DNS解析开始(DNS Start)
- DSN解析结束(DNS End)
- 网络连接开始(connectStart)
- 网络安全连接开始(secureConnectStart)
- 网络安全连接结束(secureConnectEnd)
- 网络连接结束(connectEnd)
代理检查基本不耗时,优化空间不大(考虑防代理可设置:builder.proxy(Proxy.NO_PROXY)),主要考虑DNS解析、网络连接两个方向
四、如何优化
1.DNS解析优化
- 直接用ip去访问,减少dns解析流程(考虑httpdns)
- 增加dns过期时间(域名服务商)
- 应用缓存域名解析对应ip,自定义dns解析
2.复用网络连接
- 调整网络最大请求数
- 调整连接池复用数和存活时长
- 按业务需要考虑多域名
- 根据需要动态调整网络连接、读写超时时长

