虽然网络大环境在整体变好,但是由于我们的app用户量基数大,分布地域广泛。还是会存在网络4g信号差等情况出现。动网络的质量/带宽经常会发生“跳变”,但有线网络却是“渐变”。更加使网络优化显得必要
一. 程序在网络方面表现差带来的问题:
1) 网络耗费
过多没有经过处理的网络请求,会消耗用户的流量。Android手机有专门查看的系统入口,或者第三方软件,对流量敏感的用户会经常查看。如果app流量耗费大,用户可能选择卸载。
2)电量耗费
电量也是比较紧缺的资源,与上面类似,电量敏感的用户,可能会选择卸载应用。
3) 应用等待
网络处理表现不好的app,可能产生更多的用户等待,耗费用户耐心,最终损伤品牌价值,卸载应用。
二. 网络监控
2.1. Network Monitor
Android Studio自带的Network Monitor简单直观,可以看出时间段之内的网络请求数量及访问速率。 我的应用在刚打开的时候,箭头特别高,值得关注。
image.png
香槟色的是发送,蓝色的是接收
2.2. Fiddler,Charles等抓包工具
使用Charles、Fiddler等抓包工具同样可以实现Network Monitor的功能,而且更加强大。
2.3 Stetho
Stetho是Facebook出品的一个Android应用的调试工具。无需Root即可通过Chrome,在Chrome Developer Tools中可视化查看应用布局,网络请求,sqlite,preference等。同样集成了Stetho之后也可以很方便的查看网络请求的各种情况。
三. 优化操作
分析可能带来的后果,我们可以从三个方面着手:1. 速度;2. 成功率;3. 流量。
1)Gzip压缩
Gzip压缩好像是默认的请求都采用这种形式,在http请求头里已经被默认添加了这个设置。
2)采用ip直连
DNS解析的失败率占联网失败中很大一种,而且首次域名解析一般需要几百毫秒。ip直连,不通过dns解析器,直接访问到我们的服务器,节省下这部分开销。
3)使用webp格式的图片
采用WebP格式可大幅节省流量,相对于JPG格式的图片,流量能节省将近 25% 到 35 %;相对于 PNG 格式的图片,流量可以节省将近80%。最重要的是使用WebP之后图片质量也没有改变。
这个工作一般需要服务端做。
4 ) 图片上传
- 避免整个文件传输,分片传输
- 根据网络状态,调整分片大小
- 失败后可以重新上传
5) 使用更高版本的协议
http2.0实现了更多功能,例如:“多工”、头信息压缩、服务器推送等特性
理论上讲,更优,有条件可以采用。
6)请求打包
合并网络请求,减少请求次数。
7)网络缓存
对服务端返回数据进行缓存,设定有效时间,有效时间之内不走网络请求,减少流量消耗。也可以使用自定义缓存,这点okhttp开源框架已经做进去,可以学习具体的使用。
8) 采用更精简的数据交换格式
json之所以被广泛采用原因是他的大括号的方式,很清晰,响应的也比较成熟。但是他也说明只要我们能够区分数据接口,完全是可以自定义字符串的类型。大括号,中括号,引号本身也是占用流量的。可以直接使用我们和服务器约定的格式比如:就是一串字符串,通过“#”分割。
也可以了解:google推出的:Protocol Buffer
9)避免客户端的轮询,而使用服务器推送的方式
参考文献:
《Android 高性能变编程》【西班牙】Enrique López Mañas(恩里克·洛佩斯·马尼亚斯),【意】Diego Grancini (迪戈·格兰奇尼)著叶坤 译
《Kotlin实战》【俄】Dmitry Jemerov Svetlana Isakova 著 覃宇 罗丽 李思阳 蒋扬海 译
《重构改善既有代码设计》【美】马丁福勒(MartinFowler)著 熊节 林从羽译
《Android移动性能实战》 腾讯SNG专项测试团队 著
安卓包的优化
内存占用优化
app渲染优化
掌握多线程使用
app网络优化
网友评论