优化纬度

流量消耗

  • 一段时间流量消耗的精准度量,网络类型、前后台
  • 监控相关:用户流量消耗均值、异常率(消耗多,次数多)
  • 完整链路全部监控(request、response),主动上报

    网络请求质量

  • 用户体验:请求速度、成功率

  • 监控相关:请求时长、业务成功率、失败率、Top失败接口

    其他

  • 公司成本:宽带、服务器数、CDN

  • 耗电

工具

Network Profiler

显示实时网络活动:发送、接收数据及连接数
需要启用高级分析
只支持HttpURLConnection和OkHttp网络库

Charles

精准流量获取

线上线下流量获取

TrafficStats

TrafficStats:API18以上重启以来的流量数据统计
getUidRxBytes(int uid)指定Uid的接收流量
getTotalTxBytes()总发送流量
无法获取某个时间段的流量消耗

NetworkStatsManager(推荐)

API23之后流量统计
可获取指定时间间隔内的流量信息
可获取不同网络类型下的流量消耗

前台后台流量获取

截屏2020-02-07下午3.27.10.png
有一点误差,可接受范围内
结合精细化的流量异常报警,针对性的解决后台跑流量

如何判断流量消耗偏高

绝对值看不出高低
对比竟品,相同Case对比流量消耗
异常监控超过正常指标

测试方案

设置-流量管理
抓包工具:只允许本APP联网
可以解决大部分问题,但是线上场景线下可能遇不到

流量优化实战

场景概述

数据:API、资源包(升级包、H5、RN)、配置信息
图片:下载、上传
监控:APM相关、单点问题相关

数据缓存

服务端返回加上过期时间,避免每次重新获取
节约流量且大幅提高数据访问速度,更好的用户体验
OkHttp和Volley都有较好的实践

数据增量更新

加上版本的概念,只传输有变化的数据
配置信息、省市区县等更新

数据压缩

Post请求Body使用GZip压缩
请求头压缩
图片压缩之后上传
合并网络请求、减少请求次数
性能日志上报:批量+特定场景上报

图片相关

图片使用策略细化:优先缩略图
使用WebP格式图片

质量优化实战

质量指标

网络请求成功率
网络请求速度

Http请求过程

  1. 请求到达运营商的DNS服务器并解析成对应的IP地址
  2. 创建连接,根据IP地址找到相应的服务器,发起一个请求
  3. 服务器找到相对应的资源,原路返回给访问的用户

DNS相关

问题:DNS被劫持、DNS解析慢
方案:使用HttpDNS,绕过运营商域名解析过程
优势:降低平均访问时长、提高连接成功率

  1. public class OkHttpDNS implements Dns {
  2. private HttpDnsService dnsService;
  3. private static OkHttpDNS instance = null;
  4. private OkHttpDNS(Context context) {
  5. dnsService = HttpDns.getService(context, "");
  6. }
  7. public static OkHttpDNS getIns(Context context) {
  8. if (instance == null) {
  9. synchronized (OkHttpDNS.class) {
  10. if (instance == null) {
  11. instance = new OkHttpDNS(context);
  12. }
  13. }
  14. }
  15. return instance;
  16. }
  17. @Override
  18. public List<InetAddress> lookup(String hostname) throws UnknownHostException {
  19. String ip = dnsService.getIpByHostAsync(hostname);
  20. if(ip != null){
  21. List<InetAddress> inetAddresses = Arrays.asList(InetAddress.getAllByName(ip));
  22. return inetAddresses;
  23. }
  24. return Dns.SYSTEM.lookup(hostname);
  25. }
  26. }

协议版本升级

1.0:TCP连接不复用
1.1:引入持久连接,但是数据通讯按次序进行
2.0:多工,客户端、服务器双向实时通信

网络请求质量监控

接口请求耗时、成功率、错误码

Okhttp将在EventListener里进行回掉

图片加载的每一步耗时

使用工具库Fresco,它提供了接口

网络容灾机制

备用服务器分流
多次失败后一定时间内不进行请求,避免雪崩效应

其他

CDN加速、提高带宽、动静资源分离(更新后清理缓存)
减少传输量,注意请求时机及频率
OKhttp请求池,同时最多发送64个请求,同一域名同时只能有5个,可以适当增加

网络体系化方案建设

线下测试

方案:只抓单独APP
侧重点:请求有误、多余、网络切换、弱网、无网测试

线上监控

服务端监控

请求耗时(区分地域、时间段、版本、机型)
失败率(业务失败、请求失败)
Top失败接口、异常接口

客户端监控

接口的每一步详细信息(DNS、连接、请求)
请求次数、网络包大小、失败原因
图片监控

异常监控体系

服务端防刷:超限拒绝访问
客户端:大文件预警、异常兜底策略
单点问题追查