优化纬度
流量消耗
- 一段时间流量消耗的精准度量,网络类型、前后台
- 监控相关:用户流量消耗均值、异常率(消耗多,次数多)
完整链路全部监控(request、response),主动上报
网络请求质量
用户体验:请求速度、成功率
-
其他
公司成本:宽带、服务器数、CDN
- 耗电
工具
Network Profiler
显示实时网络活动:发送、接收数据及连接数
需要启用高级分析
只支持HttpURLConnection和OkHttp网络库
Charles
精准流量获取
线上线下流量获取
TrafficStats
TrafficStats:API18以上重启以来的流量数据统计
getUidRxBytes(int uid)指定Uid的接收流量
getTotalTxBytes()总发送流量
无法获取某个时间段的流量消耗
NetworkStatsManager(推荐)
API23之后流量统计
可获取指定时间间隔内的流量信息
可获取不同网络类型下的流量消耗
前台后台流量获取
有一点误差,可接受范围内
结合精细化的流量异常报警,针对性的解决后台跑流量
如何判断流量消耗偏高
绝对值看不出高低
对比竟品,相同Case对比流量消耗
异常监控超过正常指标
测试方案
设置-流量管理
抓包工具:只允许本APP联网
可以解决大部分问题,但是线上场景线下可能遇不到
流量优化实战
场景概述
数据:API、资源包(升级包、H5、RN)、配置信息
图片:下载、上传
监控:APM相关、单点问题相关
数据缓存
服务端返回加上过期时间,避免每次重新获取
节约流量且大幅提高数据访问速度,更好的用户体验
OkHttp和Volley都有较好的实践
数据增量更新
加上版本的概念,只传输有变化的数据
配置信息、省市区县等更新
数据压缩
Post请求Body使用GZip压缩
请求头压缩
图片压缩之后上传
合并网络请求、减少请求次数
性能日志上报:批量+特定场景上报
图片相关
图片使用策略细化:优先缩略图
使用WebP格式图片
质量优化实战
质量指标
网络请求成功率
网络请求速度
Http请求过程
- 请求到达运营商的DNS服务器并解析成对应的IP地址
- 创建连接,根据IP地址找到相应的服务器,发起一个请求
- 服务器找到相对应的资源,原路返回给访问的用户
DNS相关
问题:DNS被劫持、DNS解析慢
方案:使用HttpDNS,绕过运营商域名解析过程
优势:降低平均访问时长、提高连接成功率
public class OkHttpDNS implements Dns {
private HttpDnsService dnsService;
private static OkHttpDNS instance = null;
private OkHttpDNS(Context context) {
dnsService = HttpDns.getService(context, "");
}
public static OkHttpDNS getIns(Context context) {
if (instance == null) {
synchronized (OkHttpDNS.class) {
if (instance == null) {
instance = new OkHttpDNS(context);
}
}
}
return instance;
}
@Override
public List<InetAddress> lookup(String hostname) throws UnknownHostException {
String ip = dnsService.getIpByHostAsync(hostname);
if(ip != null){
List<InetAddress> inetAddresses = Arrays.asList(InetAddress.getAllByName(ip));
return inetAddresses;
}
return Dns.SYSTEM.lookup(hostname);
}
}
协议版本升级
1.0:TCP连接不复用
1.1:引入持久连接,但是数据通讯按次序进行
2.0:多工,客户端、服务器双向实时通信
网络请求质量监控
接口请求耗时、成功率、错误码
Okhttp将在EventListener里进行回掉
图片加载的每一步耗时
使用工具库Fresco,它提供了接口
网络容灾机制
备用服务器分流
多次失败后一定时间内不进行请求,避免雪崩效应
其他
CDN加速、提高带宽、动静资源分离(更新后清理缓存)
减少传输量,注意请求时机及频率
OKhttp请求池,同时最多发送64个请求,同一域名同时只能有5个,可以适当增加
网络体系化方案建设
线下测试
方案:只抓单独APP
侧重点:请求有误、多余、网络切换、弱网、无网测试
线上监控
服务端监控
请求耗时(区分地域、时间段、版本、机型)
失败率(业务失败、请求失败)
Top失败接口、异常接口
客户端监控
接口的每一步详细信息(DNS、连接、请求)
请求次数、网络包大小、失败原因
图片监控
异常监控体系
服务端防刷:超限拒绝访问
客户端:大文件预警、异常兜底策略
单点问题追查