精确获取网络流量的消耗量,解决整体均值掩盖单点异常流量的问题。
2)、网络监控
建设全面的网络监控,因为粗粒度的监控不能够帮助我们发现和解决问题。
3)、流量消耗
- 1、精准获取一段时间的流量消耗、网络类型、前后台。
- 2、用户流量消耗均值、异常率(消耗多、次数多)。
- 3、完整链路全监控(Request、Response)、主动上报。
4)、网络请求质量
- 1、请求时长、业务成功率、失败率、TOP 失败接口,导致请求失败的原因通常有两种情况:
- 1)、弱信号:可以简单看成手机信号只有一两格的时候,这是不仅仅是信令(无线网络通信的都是一个个的信令)发出去困难,还可能导致不断切换网络、基站。App 只能在应用层做重试,因为弱信号一般都是一时的。
- 2)、拥塞网络:可以类比为堵车、排队的场景,数据包排队,信令也在排队。这时 App 不断重试,只会使得拥塞网络更为严重。我们只能让自己的非核心业务不要去排队,并让核心业务的数据量更少,协议来回更少。
- 2、用户体验
- 3、请求速度、成功率:网络正常时如何更好地利用带宽提升网络请求速度?
- 4、弱网:网络不稳定是如何最大程度上保证网络的连通性?
- 5、安全:如何防止被第三方劫持、窃听甚至篡改?
5)、其它
- 1、公司成本
- 2、带宽、服务器数量、CDN
- 3、耗电
2、网络优化误区
- 1)、仅仅关注流量消耗,忽视其它维度。
- 2)、仅仅关注均值、整体、忽视个体。
二、网络优化工具
1、Network Profiler
特点
- 1)、显示实时网络活动:发送、接收数据及连接数。
- 2)、需启动高级分析。
- 3)、仅支持 HttpURLConnection 与 OkHttp
打开高级分析
Run => Edit Cofigurations => 界面最右边 Profiling => 打开 Enable advanced profiling (required for API level < 26 only)
使用 Network Profiler 调试 WanAndroid 网络请求
选中目标网络请求,可以看到在下方的 Connection View 一栏看到对应的网络数据,如下所示:
- Size
- Type
- Status
- Time
- Timeline
选中 Connection View 特定的一条数据即可在右边看到该请求对应的网络数据。
Overview
该网络请求的预览信息
普通 Json 数据请求
图片加载请求
Response
Response Header 与 Body 信息
Request
Request Header 与 Body 信息
CallStack
网络请求的调用堆栈信息, 下图就是 Awesome-WanAndroid 发起一个网络请求所经历的调用堆栈:
Awesome-WanAndroid 使用 Glide 发起一个图片加载请求所经历的调用堆栈:
关键细节
高级配置中的 required for API level < 26 only 不是限定调试的手机版本小于26,我使用 API 27 的手机也可以调试。
实践中获得的新知识及感悟
如果想快速搞懂接手项目中的网络/图片加载等框架的w网络请求流程,可以使用 Profiler NETWORK 的 CallStack 功能,并且双击其中任意的一行调用链方法都可以 jump to 指定源码。
选中网络请求无法显示数据?
打开高级分析即可。
2、Charles
使用 Java 开发的,MAC 上使用较多。
特点
- 1)、断点功能
- 2)、Map Local
- 3)、弱网环境模拟
安装配置
1、下载 Charles。
2、截获手机端的网络包。
需要配置手机与电脑连接同一 WIFI。
1)、电脑端设置 Charles — 打开 HTTP 代理并设置代理端口
- Charles 菜单栏 => Proxy => Proxy Settin