网络优化策略
- NSCache缓存,Last-Modified, ETag
- DNS解析
- 数据压缩,protobuf, WebP
- 失败重发,缓存请求有网发送
- 弱网下设置不同超时时间
NSCache缓存
Get类似SQL查找,所以默认会缓存,Post是提交数据,类似UPDATE,所以不会缓存。 Last-Modified:资源最后修改时间,来判断是否过期 请求response中会包含该字段和时间,下次请求时加上if-Modified-since : xxxx, 如果资源无变化返回304 Not Changed。
ETag:资源文件的hash值,与当前资源文件比对是否一致,不一致则返回新值,一致则不返回。
DNS解析
使用HTTPDNS 解析域名,代替从localDNS获取IP。 当HTTPDNS解析失败时再走localDNS. 或者本地维护IP list,与HTTPDNS的结果做更新
数据压缩
webP图片格式比PNG和jpg 体积小,但是webP图片需要解析才能成为可用的jpg图片, app内解析肯定要花费一定的性能。 在wifi条件下,较大的图片直接使用png/jpg, 减少解析时间。 4G条件下,建议用webP,对流量比较友好
失败重发
超时或失败的请求建立重发机制,待网络通畅后再次发送
弱网下设置不同超时时间
不同网络状态下超时时间设置不同,例如4G只需要10秒,3G需要20秒,在超时后依然无法与服务端建立连接,可排查网络链路通畅性,例如使用HTTPDNS切换新的服务器站点,尝试连接。
HTTP2相比HTTP1.x的升级:
- HTTP/2采用二进制格式传输数据 ,而不是1.x的文本格式。
- 对消息头进行压缩传输,节省消息头占用的流量。 1.x每次请求携带大量冗余头信息,浪费资源
- 多路复用,一个域名下的请求可以通过一个TCP连接并发完成,毕竟新开一个TCP连接都需要慢慢提升传输速度。 1.x虽然通过pipeline也能并发请求,但是多个请求之间响应会被阻塞。采用二进制分帧,数据流可以乱序发送,接收后可以重新组装。
- server push, 服务端提前把资源推送给客户端