关于应用的网络请求优化,我们做前端开发的同学可能会有些不以为然,因为我们使用网络模块相对很简单,拿成熟框架,简单包装一下就可以了,我们关注的更多的可能只是请求参数的组织和网络框架的使用方面。
其实我们能做的东西有很多……
客户端单独可以做的优化清单
缓存机制
对于不经常变动的资源,如果存在合理的缓存机制,能够极大的帮助用户节省流量,同时因为响应时间的极大缩短,可以提高用户的体验。 在这里吐槽一下妈妈帮的APP,妈妈帮里有个模块是“能不能吃”,功能是用户输入食物的名字,然后发起网络请求,服务响应后告诉用户这个食物孕妇能不能吃。这个模块在实际使用中用户体验非常糟糕,经常出现网络请求失败。我觉得这里完全可以采用缓存机制,因为大多数的食物能不能吃,变动性非常小,完全可以做一个本地缓存,这样不用每次都发起网络请求。
重试机制
对于非常重要的请求,期望请求成功率为100%的请求,我们可以加入重试机制,尽最大可能保证请求成功,比如重试三次后,可以通过交互告诉用户请求失败。
当然对于一般的非重要的请求,请求一次即可。
控制最大并发数,并设置请求优先级策略 (可以参考SDWebImage的策略)
如果同时发起很多个请求,也会造成无法享受多线程的优势,因此要合理控制并发数
同时通过设置请求的优先级,使得高优先级的请求先发送,然后再去请求其他的
请求延迟发送策略
比如发现当前APP无网络的时候,可以延迟0.3后再发送请求,防止用户是因为刚刚切换网络造成不好的体验
需要服务端配合的优化清单
请求数据压缩
减小请求的包体积,肯定有助于网络请求
DNS优化
客户端发起网络请求,如果使用的是域名,第一步做的就是DNS解析。
比如可以先利用ip和服务端进行交互,让服务端返回一个对该用户来说访问更快的ip,之后的请求都使用这个ip
多通道策略
比如APP打开的时候就建立一个长链接,这样客户端和服务端交互的时候就可以使用长连接和http两种方式,这两种方式配合使用
网友评论